この記事を読むのに必要な時間は約 4 分です。
CakePHP の通常のページは、Content-Type: text/html で送信されます。html 以外のコンテンツである、CSS や JS や、ダウンロードするファイル等を送信する場合は、Content-Type を書き換えて、MIME type を指定する必要があります。
今回の記事では、CakePHP 2.x で、Content-Type を指定する方法をご紹介したいと思います。
CakePHP 関連記事は、以下よりご覧下さい。
Content-Type 指定する方法
Controller で以下の例のように $this->response->type( 指定する内容 ); で指定することができます。
以下の例は、PostsController の hoge という Action で、app/View/Posts/fuga.ctp を読み込む場合の記述です。
1 2 3 4 |
public function fuga(){ ... 処理 ... $this->response->type("text/javascript"); } |
うまく動作しない指定方法
通常の PHP であれば、 header( "Content-Type: text/css" ); 等で可能ですが、CakePHP で Controller や View を通している場合、後から text/html に上書きされるようで、うまく動作しませんでした。
また、$this->response->header() でもうまく動作しませんでした。以下が動作しない例です。
1 2 3 4 5 6 |
/* 以下はうまく動作せず、全て 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 に、以下のような例が記載されているのですが、なぜ動作しないのかは分かりません …
1 2 3 4 |
$this->response->header(array( 'WWW-Authenticate: Negotiate', 'Content-type: application/pdf' )); |
ひとこと
CakePHP のフレームワーク側で、バッファしたりとハンドリングしているためか、ちゃんと動作させるために、意外と手間取りました。
お役に立てれば幸いです。
[動作確認環境]
- PHP : 5.6.9
- CakePHP : 2.6.4
- MySQL : 5.6.24
今回は以上です。