asylum29 / api-skeleton
Symfony api-skeleton
Installs: 9
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:project
Requires
- php: >=7.2.5
- ext-ctype: *
- ext-iconv: *
- ext-json: *
- doctrine/annotations: ^1.13
- doctrine/doctrine-bundle: ^2.5
- doctrine/doctrine-migrations-bundle: ^3.2
- doctrine/orm: ^2.11
- nelmio/api-doc-bundle: ^4.10
- sensio/framework-extra-bundle: ^6.2
- symfony/console: 5.4.*
- symfony/dotenv: 5.4.*
- symfony/flex: ^1.17|^2
- symfony/framework-bundle: 5.4.*
- symfony/property-access: 5.4.*
- symfony/proxy-manager-bridge: 5.4.*
- symfony/runtime: 5.4.*
- symfony/security-bundle: 5.4.*
- symfony/serializer: 5.4.*
- symfony/validator: 5.4.*
- symfony/yaml: 5.4.*
Requires (Dev)
- friendsofphp/php-cs-fixer: v2.16.3
- symfony/maker-bundle: ^1.38
Conflicts
Replaces
README
Шаблон API для Symfony.
Особенности
- автоматический парсинг входящего http-запроса в DTO-объект в параметре действия контроллера
- контроллер BaseController с методами success() и error() с поддержкой сериализации и методом validate() для валидации
- сквозная обработка ошибок для http-запросов
- генерация документации с использованием NelmioApiDocBundle
- префикс api для всех роут
Создание нового проекта
composer create-project asylum29/api-skeleton <project_name>
Создайте .env.local на базе .env и укажите требуемые параметры.
Использование
Сериализация
// унаследуйте контроллер от BaseController class CustomController extends BaseController { /** * @Route("/custom", name="app_custom") */ public function index(): Response { ... return $this->success($dataOrEntity); } }
Группы сериализации
// в Entity или DTO /** @Groups("groupName") */ private $field; /** @Groups("groupName") */ public function getField(): fieldtype // в контроллере return $this->success($dataOrEntity, ['groups' => 'groupName']);
Постраничная навигация
// в контроллере return $this->success( $entities, [ 'current_page' => $page, 'per_page' => $perPage, 'total' => $count, ] );
Генерация ошибки
// в контроллере public function index(): Response { ... if (!$valid) { $this->error($message, $status); } ... }
DTO в контроллере с заполнением из Request
// в классе DTO /** @RequestDto */ class СustomDto // в контроллере public function index(СustomDto $dto): Response
Валидация
// в контроллере $this->validate($object, $groups)
Генерация REST-контроллера с поддержкой CRUD
Выполните команду
php bin/console make:rest
API-документация
Перейдите по ссылке /docs/