Отправка правильного типа содержимого JSON для CakePHP

В моем приложении CakePHP я возвращаю JSON и выхожу для определенных запросов. Примером этого может быть попытка получить доступ к API для входа в систему как запрос GET:

header('Content-Type: application/json'); echo json_encode(array('message'=>'GET request not allowed!')); exit; 

Однако мне нужно префикс эха с типом контента, чтобы он был отправлен как JSON. В противном случае мой код на другом конце интерпретирует его другим.

Любые идеи о том, как обойти это? Или, по крайней мере, улучшить его.

Обновление: Торт версии 2.3.0

Вы можете использовать новый объект ответа 2.x:

 public function youraction() { // no view to render $this->autoRender = false; $this->response->type('json'); $json = json_encode(array('message'=>'GET request not allowed!')); $this->response->body($json); } 

См. http://book.cakephp.org/2.0/ru/controllers/request-response.html#cakeresponse.

Также вы можете использовать мощные функции отдыха и RequestHandlerComponent для достижения этого автоматически, как задокументировано: http://book.cakephp.org/2.0/ru/views/json-and-xml-views.html

Вам просто нужно разрешить расширение json и вызвать ваше действие как /controller/action.json . Тогда торт будет автоматически использовать JsonView, и вы можете просто передать свой массив. Это будет сделано для JSON и действительный ответ класса вида.

Оба способа чище, чем ваше решение «выход» – попробуйте выполнить единичный код, содержащий die () / exit (). Это закончится ужасно. Поэтому лучше никогда не использовать его в своем коде в первую очередь.