Tags : framework
このTagsの登録数:2件 表示 : 1 - 2 / 2
Ethna をインストール & UTF-8 化
Ethna(ethna.jp, beta.ethna.jp)を試してみることにする。PHP5にPEARでインストール。
$ pear channel-discover pear.ethna.jp $ pear install ethna/ethna-beta
ファイルの文字コードがEUC-JPなので全部UTF-8にする。テンプレートのcharsetも置き換える。
<?php $ethna_dir= '/path/to/lib/php/Ethna'; //ここで決め打ち $pattern = $ethna_dir.'/*'; $files=glob($pattern);while(count($files) > 0){
foreach($files as $file) {
conv_file($file);
}
$pattern.='/*';
$files=glob($pattern);
}function conv_file($file) {
global $ethna_dir;
if(is_dir($file)) return;
$body = file_get_contents($file);
if(stripos($body, 'EUC-JP')){
if($file!=$ethna_dir.'/class/Ethna_SmartyPlugin.php'){
$body=str_ireplace('EUC-JP', 'UTF-8', $body);
}
}
$body = mb_convert_encoding($body, 'UTF-8', 'EUC-JP');
file_put_contents($file, $body);
}
?>
というスクリプトを書いて、php cliで実行。Ethna_SmartyPlugin.phpにEUC-JPのみ対応の関数があるが、使わないので放っておく。bin/ethnaの中にパス決め打ちの箇所があるので書き直す。準備完了。
アプリケーションマネージャ機能を積極的に使うべきだろうがちょっと気になる点がある。
アプリケーションマネージャとは、アクションからロジックを分離する為に、Ethna_AppManagerクラスを継承したものを「[project_id]_[manager_name]Manager」という命名規則で作って、[project_id]_Controller の var $managerに書き足すことで、主要クラスから$this->Test/*マネージャの変数名*/->echo();などと使えるようになる仕組みのこと。
で、何が気になるかというと使う使わないに関わらず初期化のときに全部インスタンス化されてしまうこと。更にデータベースにも繋げてしまう。また、$manager配列に記述するだけでは駄目で、(当たり前といえば当たり前だが)あらかじめファイルをインクルードしておかないといけない。
---- Testapp_Controller.php ---- require_once('Testapp_TestManager.php');class Testapp_Controller extends Ethna_Controller
{
....
var $manager = array(
'testmanager' => 'Test'
'af' => 'Hoge' // afを上書きしてしまう
//この配列のキーと値はどっちが何なんだか分かりにくい
);
....
}
インスタンス変数としてアクセスできるようにするため全部読み込んでいるのだろう、たぶん。データベースも$manager->dbと変数アクセスできるようにインスタンス化しているのだと思われる。また、アクセスするための変数名はノーチェックで上書きされてしまうので「af」とか既存の名前を使うと壊れてしまう。
__get()で大改造は、サブクラスでやるとしてもバージョンアップに対応できるか自信がないし、面倒くさすぎる。別のオブジェクト管理機能を付けてマネージャは使わないようにした方が楽かもしれん。
参考: