Zend Framework 2: не может отправить желаемый код состояния в ответ

Я создаю REST API на Zend Framework 2. Я хочу отправить определенный код состояния в ответ на любую ошибку.

Я попробовал ниже в моем контроллере:

$statusCode = 401;
$this->response->setStatusCode($statusCode);
return new JsonModel(array("error message" => "error description"));

Повторяет печать кода состояния 401, но клиентское приложение получает код состояния 200 каждый раз.

Как я могу установить код состояния на определенное значение?

Module.php:

class Module 
{
    public function getAutoloaderConfig()
    {
        return array(
                     'Zend\Loader\ClassMapAutoloader' => array(
                                                               __DIR__ . '/autoload_classmap.php',
                                                               ),
                     'Zend\Loader\StandardAutoloader' => array(
                                                               'namespaces' => array(
                                                                                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                                                                                     ),
                                                               ),
                     );
    }

    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }

}

РЕДАКТИРОВАТЬ: Ниже, как выглядит ответ:

2 ответа

Я только что проверил это на простом примере проекта по адресу https://github.com/akrabat/zf2-api-response-code

В контроллере, который расширяется AbstractRestfulControllerможно конечно использовать

<?php
namespace Application\Controller;

use Zend\Mvc\Controller\AbstractRestfulController;
use Zend\View\Model\JsonModel;

class IndexController extends AbstractRestfulController
{
    public function create($data)
    {
        $this->response->setStatusCode(401);
        return new JsonModel(array("message" => "Please authenticate!"));
    }
}

Тестируя через curl, я получаю это:

$ curl -v -X POST http://zf2-api-example.localhost/
* Adding handle: conn: 0x7f880b003a00
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7f880b003a00) send_pipe: 1, recv_pipe: 0
* About to connect() to zf2-api-example.localhost port 80 (#0)
*   Trying 127.0.0.1...
* Connected to zf2-api-example.localhost (127.0.0.1) port 80 (#0)
> POST / HTTP/1.1
> User-Agent: curl/7.30.0
> Host: zf2-api-example.localhost
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< Date: Fri, 17 Jan 2014 10:02:47 GMT
* Server Apache is not blacklisted
< Server: Apache
< Content-Length: 34
< Content-Type: application/json; charset=utf-8
<
* Connection #0 to host zf2-api-example.localhost left intact
{"message":"Please authenticate!"}

Как видите, код ответа - 401. Если вы не получаете его с приложением, проверьте мой пример на github и посмотрите, работает ли он с вашим сервером.

Попробуй это:

$statusCode = 401;
$response = $this->response;
$response->setStatusCode($statusCode);
$response->setContent(new JsonModel(array("error message" => "error description")));
return $response;

Если это не работает, может быть onDispatch обработчик событий, который снова перезаписывает код состояния. Проверьте свои Module.php"S.

Другие вопросы по тегам