構成
いつもの通りバーチャルホストでテスト。
hosts
127.0.0.1 test.sample.com
vhost
#test.sample.com <VirtualHost *:80> DocumentRoot "/home/sample/public_html" ServerName test.sample.com <Directory "/home/sample/public_html"> AllowOverride All order deny,allow allow from All </Directory> </VirtualHost>
ディレクトリ
http://sample.com/ ← ユーザー
http://sample.com/admin ← 管理画面
http://sample.com/mobile ← モバイル
と分けたい。
/home/sample/ cake_core ← [vendors、cake、plugins] public_html ← [appのwebrootをコピー] cake_app ← [appをコピーしてuser,admin,mobileにリネーム]
index.phpの変更
public_html/index.php
/** * These defines should only be edited if you have cake installed in * a directory layout other than the way it is distributed. * When using custom settings be sure to use the DS and do not add a trailing DS. */ if (PHP_OS == "WIN32" || PHP_OS == "WINNT") { define('C', 'C:'); } else { define('C', ''); } /** * The full path to the directory which holds "app", WITHOUT a trailing DS. * */ if (!defined('ROOT')) { //define('ROOT', dirname(dirname(dirname(__FILE__)))); define('ROOT', C.DS.'home'.DS.'sample'.DS.'cake_app'); } /** * The actual directory name for the "app". * */ if (!defined('APP_DIR')) { //define('APP_DIR', basename(dirname(dirname(__FILE__)))); define ('APP_DIR', 'user'); } /** * The absolute path to the "cake" directory, WITHOUT a trailing DS. * */ if (!defined('CAKE_CORE_INCLUDE_PATH')) { //define('CAKE_CORE_INCLUDE_PATH', ROOT); define('CAKE_CORE_INCLUDE_PATH', C.DS.'home'.DS.'sample'.DS.'cake_core'); }
public_html/mobile/index.phpは[APP_DIR]を’mobile’に変更
Ktai Libraryをコピー
githubからパッケージをダウンロードしてappディレクトリをmobileにコピー。
Ktai Library本体をmobile/vendorsにコピー。
routes.php
Router::connectNamed(array(), array('argSeparator' => '~'));
ktai_app_controller.php
ktai_app_controller.phpをapp_controller.phpにリネームする。
$ktaiプロパティの追加
今回は各コントローラーに追加。
ソースファイルは全て、UTF-8で作成しcharset=Shift-JISとして出力とした。
var $ktai = array( 'input_encoding' => 'UTF-8', 'output_encoding' => 'SJIS-win', 'use_binary_emoji' => true, 'output_auto_convert_emoji' => true, 'output_auto_encoding' => true, //'output_convert_kana' => 'knrs', 'output_convert_kana' => 's', //'use_xml' => true, );
shift-jisでデータがサブミットされるので、
function beforeFilter () { parent::beforeFilter(); mb_convert_variables("UTF-8", "SJIS-Win", $this->data); }
とした。
また、フォームの「accept-charset」はApp.encodingの値が設定されるので
<?php echo $this->Form->create('Regist', array('encoding' => 'shift-jis'));?>
とする。
最後に
app_error.phpでエラー処理しているのですが、Ktaiコンポーネントのshutdownメソッドが呼ばれずshift-jisで出力できないので、エラーページだけshift-jisで対応しました。