alchemy/rest-bundle

简单的REST实用工具包

0.0.5 2016-05-16 09:37 UTC

This package is auto-updated.

Last update: 2024-09-15 02:46:27 UTC


README

License Packagist Travis Scrutinizer Coverage Scrutinizer Packagist

特性

  • 提供使用预定义格式和时区自动解析日期参数的功能
  • 提供自动解析排序和分页参数的功能
  • 在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 属性。