asylum29 / api-skeleton
Symfony api-skeleton
v1.9
2022-10-29 08:42 UTC
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
为 Symfony 创建的 API 模板。
特性
- 自动解析进入的 http-请求到 DTO-对象,参数在控制器动作中
- 控制器 BaseController 包含 success() 和 error() 方法,支持序列化和 validate() 方法进行验证
- 对 http-请求进行错误处理
- 使用 NelmioApiDocBundle 生成文档
- 所有路由前缀为 api
创建新项目
composer create-project asylum29/api-skeleton <project_name>
基于 .env 创建 .env.local 并指定所需参数。
使用方法
序列化
// унаследуйте контроллер от 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)
生成支持 CRUD 的 REST 控制器
执行命令
php bin/console make:rest
API 文档
点击链接 /docs/