CakePHP で JSONP コンテンツを提供したいのですが、それを行う適切な方法は何だろうと思っていました。
現在、この CakePHPガイドに従って、JSON コンテンツを自動的に提供できます。
わかりました、このサイトで解決策を見つけました。基本的に、 afterFilter メソッドを次のようにオーバーライドします。
public function afterFilter() {
parent::afterFilter();
if (empty($this->request->query['callback']) || $this->response->type() != 'application/json') {
return;
}
// jsonp response
App::uses('Sanitize', 'Utility');
$callbackFuncName = Sanitize::clean($this->request->query['callback']);
$out = $this->response->body();
$out = sprintf("%s(%s)", $callbackFuncName, $out);
$this->response->body($out);
}
それが他の誰かにも役立つことを願っています。
CakePHP 2.4 以降では、代わりにこれを行うことができます。
http://book.cakephp.org/2.0/en/views/json-and-xml-views.html#jsonp-response
したがって、次のように簡単に書くことができます。
$this->set('_jsonp', true);
関連するアクションで。
または、単に次のように書くこともできます。
/**
*
* beforeRender method
*
* @return void
*/
public function beforeRender() {
parent::beforeRender();
$this->set('_jsonp', true);
}