Включение CORS в приложении CakePHP

Я пытаюсь включить CORS для API, встроенного в CakePHP, чтобы все запросы были доступны с помощью следующего в AppController:

public function beforeFilter() { header("Access-Control-Allow-Origin: *"); } 

Это не в том месте? Поскольку запросы по-прежнему блокируются.

Обновление: похоже, это действительно работает, потому что я делаю что-то вроде:

 header('Content-Type: application/json'); echo json_encode(array('message'=>'Hello world!')); 

В некоторых моих методах он действует так, как будто он переопределяет заголовок, устанавливающий AppController, поэтому он не появляется в ответе на вызовы JSON. Есть идеи?

Обновление 2: Возвращение JSON, как показано ниже, устраняет проблему:

 $this->response->type('json'); $this->response->body(json_encode(array('message'=>'Hello world!'))); 

Таким образом, очевидно, используя header() в Cake разбивает предыдущие заголовки?

Вы можете сделать это, используя объект ответа на торт;

 $this->response->header('Access-Control-Allow-Origin', '*'); 

Дополнительная информация об объекте ответа; http://book.cakephp.org/2.0/en/controllers/request-response.html#setting-headers

Однако обратный вызов beforeRender () кажется более логичным.

Другим вариантом является добавление этого заголовка в примеры apache vhost или htaccess, которые можно найти в файле htaccess Html5Boilerplate, что очень интересно посмотреть (хорошо документировано), поскольку оно содержит множество оптимизаций, которые хорошо работают с cakephp как Что ж;

https://github.com/h5bp/server-configs-apache/blob/master/dist/.htaccess

http://html5boilerplate.com/

Основываясь на том, что я узнал здесь: Отправка правильного типа контента JSON для CakePHP

Правильный способ возврата JSON в CakePHP выглядит так:

 $this->response->type('json'); $this->response->body(json_encode(array('message'=>'Hello world!'))); 

Это связано с тем, что заголовки могут быть переопределены, и поэтому CORS не работает, если вы не сделаете это «правильным» способом, используя объект ответа в Cake.