この記事を読むのに必要な時間は約 4 分です。
CakePHP の通常のページは、Content-Type: text/html で送信されます。html 以外のコンテンツである、CSS や JS や、ダウンロードするファイル等を送信する場合は、Content-Type を書き換えて、MIME type を指定する必要があります。
今回の記事では、CakePHP 2.x で、Content-Type を指定する方法をご紹介したいと思います。
[pn-box color=”lgray”]
CakePHP 関連記事は、以下よりご覧下さい。
[pn-box-close]
Content-Type 指定する方法
Controller で以下の例のように $this->response->type( 指定する内容 ); で指定することができます。
以下の例は、PostsController の hoge という Action で、app/View/Posts/fuga.ctp を読み込む場合の記述です。
public function fuga(){ ... 処理 ... $this->response->type("text/javascript"); }
うまく動作しない指定方法
通常の PHP であれば、header( “Content-Type: text/css” ); 等で可能ですが、CakePHP で Controller や View を通している場合、後から text/html に上書きされるようで、うまく動作しませんでした。
また、$this->response->header() でもうまく動作しませんでした。以下が動作しない例です。
/* 以下はうまく動作せず、全て text/html になります */ public function index(){ header("Content-Type: text/css"); $this->response->header( "Content-type: text/css" ); $this->response->header( array("Content-type: text/css") ); }
公式 Cookbook に、以下のような例が記載されているのですが、なぜ動作しないのかは分かりません …
$this->response->header(array( 'WWW-Authenticate: Negotiate', 'Content-type: application/pdf' ));
[pn-box color=”lgray”]
公式ドキュメントへのリンク
CakePHP Cookbook 2.x > コントローラ > リクエストとレスポンスオブジェクト > CakeResponse > コンテンツタイプを扱う
[pn-box-close]
ひとこと
CakePHP のフレームワーク側で、バッファしたりとハンドリングしているためか、ちゃんと動作させるために、意外と手間取りました。
お役に立てれば幸いです。
[pn-cakephp-env]
今回は以上です。
[pn-amzn-cakephp]