alchemy / rest-bundle
简单的REST实用工具包
0.0.5
2016-05-16 09:37 UTC
Requires
- php: >=5.4
- league/fractal: ^0.12.0|^0.13.0
- willdurand/negotiation: ~2.0@dev
Requires (Dev)
- pagerfanta/pagerfanta: ^1.0.3
- phpunit/phpunit: ^4.7
- silex/silex: ^1.0.0
- squizlabs/php_codesniffer: ^2.3
- symfony/symfony: ~2.6
README
特性
- 提供使用预定义格式和时区自动解析日期参数的功能
- 提供自动解析排序和分页参数的功能
- 在AJAX/JSON环境中提供标准化的错误响应
配置
通过将其添加到应用程序内核中启用该包。
默认情况下,所有监听器都被启用。您可以将以下部分添加到您的 config.yml
中以更改监听器的行为
注意 以下配置与默认设置匹配
alchemy_rest: dates: enabled: true format: Y-m-d H:i:s timezone: UTC exceptions: enabled: true content-types: [ "application/json" ] # Set this to null to use default transformer, or use the key of a service implementing # Alchemy\Rest\Response\ExceptionTransformer transformer: null sort: enabled: true sort_parameter: sort direction_parameter: dir mutli_sort_parameter: sorts pagination: enabled: true limit_parameter: limit offset_parameter: offset
用法
自动日期解析
要激活请求参数上的日期转换,您必须在路由文件中明确指定哪些参数将在每个路由的基础上解析为日期。
示例
假设您的请求将包含一个 from
和一个 to
参数
my_application.api_route: pattern: /api/route defaults: _dates: [ to, from ]
您现在可以按如下方式为控制器方法添加类型提示
class MyController { public function index(\DateTimeInterface $from, \DateTimeInterface $to) { // Do something with those dates... } }
自动排序和分页
要激活自动排序和分页参数解析,您必须在路由文件中明确在每个路由的基础上激活它们。
简单示例
my_application.api_route: pattern: /api/route defaults: _paginate: true _sort: true
您现在可以按如下方式为控制器方法添加类型提示
class MyController { public function index(PaginationOptions $pagination, SortOptions $sort) { // Do something... } }
将控制器结果转换为JSON响应
此监听器始终被激活。要使用它,您必须首先编写一个转换器(有关转换器的信息,请参阅League/Fractal文档),并将其定义为依赖注入配置中的标记服务
services: my_transformer: class: My\Transformer tags: - { name: alchemy_rest.transformer, alias: my_transformer }
然后,在您的路由文件中,您需要为给定路由指定转换器
my_application.api_route: pattern: /api/route defaults: _rest: decode_request: true # Enabled by default, decodes JSON request bodies into encode_response: true transform: my_transformer list: false
您可以使用路由默认值中的 list
参数来指定控制器结果是否应作为列表或简单对象处理。如果您的控制器返回PagerFanta实例(您必须在项目中包含此库,因为它是一个可选依赖项),则响应将自动包含一个包含具有分页元数据的 meta
属性。