0

我似乎只能在调用 /merchant/1 时创建新实体,但是 /merchant 将返回 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',
    ),

不知道我还能提供什么来帮助你们了解情况,但很乐意根据要求提供更多详细信息。

谢谢你的时间。

4

2 回答 2

2

因此,我将 POST 添加为允许的 HTTP 收集方法,现在它可以用于发布单个实体。

不确定这是否是设计使然,但解决了我的问题。

于 2014-06-08T21:43:47.300 回答
2

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

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

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

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

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

于 2014-06-24T15:20:19.103 回答