Apigility需要route_identifier_name用于代码连接的REST POST实体

时间:2014-06-08 18:46:48

标签: php api zend-framework2 apigility

我似乎只能在调用/ merchant / 1时创建新实体,但/商家将返回405状态。

这是我的POST资源方法:

public function create($data)
{
     return $this->mapper->create($data);
}

此实体的id是auto_incrment字段,因此对我来说,客户端不提供标识符是有意义的。

这是我的module.config.php的一个片段:

'zf-rest' => array(
    'MyTest\\V1\\Rest\\Merchant\\Controller' => array(
        'listener' => 'MyTest\\V1\\Rest\\Merchant\\MerchantResource',
        'route_name' => 'MyTest.rest.merchant',
        'route_identifier_name' => 'merchant_id',
        'collection_name' => 'merchant',
        'entity_http_methods' => array(
            0 => 'GET',
            1 => 'PATCH',
            2 => 'PUT',
            3 => 'POST',
        ),
        'collection_http_methods' => array(
            0 => 'GET',
        ),
        'collection_query_whitelist' => array(),
        'page_size' => 25,
        'page_size_param' => null,
        'entity_class' => 'MyTest\\V1\\Rest\\Merchant\\MerchantEntity',
        'collection_class' => 'MyTest\\V1\\Rest\\Merchant\\MerchantCollection',
        'service_name' => 'Merchant',
    ),

不确定我还能提供什么来帮助您了解情况,但很高兴根据要求提供更多详细信息。

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

所以我添加了POST作为允许的HTTP集合方法,它现在可用于发布单个实体。

不确定这是否符合设计但解决了我的问题。

答案 1 :(得分:2)

如果您在Restful API上创建新资源,则会在收集路径上发布帖子。因此,您应该将POST方法添加到collection_http_methods数组中。这完全符合Restful规范。

'collection_http_methods' => array(
    0 => 'GET',
    1 => 'POST',
),

我认为如果你改变它应该有效。 还有一件事,我不知道为什么他们会在这样的文档中这样做,但我的http_methods数组看起来像这样:

'collection_http_methods' => array('GET', 'POST')

如果你问我,会容易得多:)