Я добавляю сюда свои два цента, потому что я не чувствую, что ни один из этих ответов охватывал эту тему так тщательно, как мне бы хотелось (по крайней мере, для Cake 2.x).
Если вы хотите выдать статус ошибки, используйте классы исключений (как указано в других ответах):
throw new BadRequestException(); // 400 Bad Request
// Or customize the code...
throw new BadRequestException('Custom error message', 405); // 405 Method Not Allowed
Интересный факт : Cake автоматически сделает некоторую магическую ошибку рендеринга даже для вызовов RESTful через класс ExceptionRenderer
. Еще более забавным является тот факт, что он основан на коде состояния , а не факте, что Exception
мог быть брошен, поэтому, если вы установите код состояния на> 400 самостоятельно, вы, скорее всего, получать сообщения об ошибках, даже если вы их не хотели.
Если вы хотите вернуть определенный код состояния для конечной точки REST JSON / XML, воспользуйтесь новым объектом CakeResponse
, но также убедитесь, что вы добавили специальную переменную _serialize
, иначе вы получите ошибка «представление не найдено», так как торт попытается найти представление для визуализации вашего JSON / XML. (Это специально разработано - см. Класс JsonView
/ XmlView
.)
$this->response->setStatus(201); // 201 Created
$this->set('_serialize', array()); // Value must be something other than null
И, наконец, если вы хотите отправить статус не-200 для регулярно отображаемой страницы, вы можете просто использовать метод setStatus()
, ничего не упомянув в предыдущем ответе:
$this->response->setStatus(201);
UPDATE:
$this->response->setStatus('code');
больше не доступно. Используйте
$this->response->statusCode('code');