cakePHP1.2で携帯用

cakePHPで携帯用にする方法はいくつかあるようですが、私の場合。

・内部はUTF-8、出力はSHIFT-JIS,入力をUTF-8に変換
app/app_controller.php

if($this->RequestHandler->isMobile()){
   mb_language('ja');
   mb_internal_encoding('UTF-8');
   mb_http_output('SJIS');
   ob_start("mb_output_handler");
   mb_convert_variables("UTF-8", "SJIS", $this->params['url']);
   mb_convert_variables("UTF-8", "SJIS", $this->params['form']);
   mb_convert_variables("UTF-8", "SJIS", $this->data);
}

・RequestHandler(拡張子)で「.mobile」を使用する。
app/config/routes.phpに追加
  Router::parseExtensions('mobile');
app/app_controller.php
  $this->RequestHandler->setContent("mobile",'text/html');

app/viewsの各コントローラーおよびlayoutsのフォルダに「mobile」フォルダを作成してビューを配置するのですが、なぜかドコモHPから入手できるiモードHTMLシミュレータでエラーになりました。layout用ビューを秀丸で一度文字コードをSFIFT-JISで保存してからUTF-8で保存しなおすと直りました。

・リダイレクトをオーバーライド,セッションID付加
app/app_controller.php

//redirect メソッド書き換え
 function redirect($url,$status = null) {   if($this->RequestHandler->isMobile()){    if(strpos($url, '.mobile') === false) {     $url = $url.".mobile?".Configure::read('Session.cookie')."=".session_id();    } else {     $url = $url."?".Configure::read('Session.cookie')."=".session_id();    }    parent::redirect($url,$status);   } else {    parent::redirect($url,$status);   } }

他にも各リンクでセッションID引き渡しをします。
core.phpの
Security.levelがhighの場合、Session.phpでsession_regenerate_id()(セッションID振り直し)してくれます。

各リンクでセッションID引き渡しがめんどうなら、リーサルウェポンsession.use_trans_sidを使う手も。
core.phpの
  Configure::write('Session.save', 'mobilesession');
とかカスタム宣言して、同フォルダにmobilesession.phpファイルを作成。session.phpの457行目以下を参考にしてカスタマイズします。
注意!session.use_trans_sidはPHP5以上でないとini_setできません。