Kohanaの基本動作覚書
HTTPレスポンスヘッダについて
Another HTML Lintgoogle
で頁をチェックすると
となる。
XHTML1.1勧告に忠実にメディアタイプをapplication/xhtml+xmlと答えるとM$のIEが誤動作してしまう、というのは旧くて新しい問題[1]なので、ブラウザ別チェックルーチンを付加してIEにはtext/htmlを返すとか、そんなことをやる気は毛頭ない(面倒なことはしない=家訓)。
ただ、このヘッダ返信に関してKohanaのViewクラスがやっていることだけは確かめてみた。
クラスはView($name,$data,$type)という引数を持っている。この$type変数は、実際はファイル拡張子にほかならない。
$typeが指定されなければ、viewsディレクトリのphpファイルがよみこまれて処理後のものをそのまま echoするだけである。つまりはphpのdefault_mimetype(普通text/html)が送出されるのだろう。
一方、$type指定した場合は、その拡張子を
Viewクラスset_filenameメソッド
$this->kohana_filetype = Kohana::config('mimes.'.$type);
で判定して、
Viewクラスrenderメソッド
header('Content-Type: '.$this->kohana_filetype[0]);
するようである。
あれ?ぼくがmimeタイプの判定についてでKohanaはエライとか、褒めてたのに、最後のところで別のmime判定方法でヘッダ出すのかい、Kohanaよ。。と、この頁は、これを書きたかっただけであった。
いや、でも、もう一つ。もし上に書いたように、まじめにXHTML勧告にしたがって、IEに配慮しながらレスポンスヘッダを返そうとした場合は、Viewクラスのメソッドを拡張で上書きするか、phpのdefault_mimeを場合分して設定するというかたちを取るしかなさそうである。ホントは標準Viewクラス内に、(たとえば)set_media_typeメソッドのようなものが入っていてくれるのが、有り難い訳だ。