Куда поместить $this-›request-›headers('Content-Type', 'application/json');

Я пытаюсь изменить тип содержимого на application/json в Kohana. Я поместил это в действие в моем контроллере:

$this->request->headers('Content-Type', 'application/json');
$this->content = json_encode($json_data);

Однако запрос по-прежнему имеет тип содержимого text/html.

Где я должен поставить $this->request->headers('Content-Type', 'application/json'); ?


person T.i.    schedule 28.08.2011    source источник


Ответы (3)


Чтобы уточнить ответ Клаудио, да, вам нужно установить заголовок ответа, а не запрос, например

$this->response->headers('Content-Type','application/json');

Кроме того, я не уверен, как вы реализовали свой контроллер, но похоже, что это может быть контроллер шаблона, основанный на

$this->content = json_encode($json_data);

Если вы используете контроллер шаблона, убедитесь, что вы установили для auto_render значение FALSE.

Наконец, установите тело ответа с вашими данными json.

$this->response->body(json_encode($json_data));
person Andrew Schmid    schedule 19.09.2011

Что ж, вам нужно отредактировать заголовки response.

http://kohanaframework.org/3.1/guide/api/Response#headers

person Claudio    schedule 28.08.2011

ОП спросил, куда его положить. Если вы используете контроллер, который расширяет Controller_Template, как и я, я просто добавил пример кода Эндрю Шмида в метод after() моего базового контроллера (до parent::after()), и он отлично сработал.

So:

Controller_Your_Controller extends Controller_Template {

   // Your controller actions

   public function after()
   {
       // Set the response content-type here
       $this->response->headers('Content-Type','application/json');
       parent::after();
   }
}
person phpguru    schedule 23.02.2013