CakePHP 2.x で MIME type (Content-Type) を指定する方法

この記事を読むのに必要な時間は約 4 分です。


CakePHP の通常のページは、Content-Type: text/html で送信されます。html 以外のコンテンツである、CSS や JS や、ダウンロードするファイル等を送信する場合は、Content-Type を書き換えて、MIME type を指定する必要があります。

今回の記事では、CakePHP 2.x で、Content-Type を指定する方法をご紹介したいと思います。

 

[pn-box color=”lgray”]

CakePHP 関連記事は、以下よりご覧下さい。

tag : CakePHP

[pn-box-close]


cake-logo

 

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]

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です