いしなお!
2006-03-23 [長年日記]
_ [日常][自動車保険] ソニー損保の第一印象わろし
コンビニ払いで申し込んだのに、支払期限までに振り込まなければ申し込みは無効になるとか注意書が出ていたのに、支払期限の翌日が前の保険が切れる日なんで間に合わないと保険の空白期間ができてしまうのに、コンビニ払いの振り込み用紙が支払期限の翌日に届きやがったよ。
支払期限の前日になっても支払用紙が届かないんで、電話してクレジットカードで払い込んだから間に合ったけど、なかなか出だしからやりやがるな。休日祝日が絡む日程でぎりぎりに申し込んだっつー状況も原因の一つだろうけど、保険とか取り扱ってるところならばその辺ちゃんと管理してくれや。
_ [PHP][PHP5][Zend Framework][Smarty] Zend_View_Smartyを作ってみた
Zend_ViewをSmarty対応するためのZend_View_Smartyを作ってみた。
ただし、「Zend Frameworkをどう使うか その8」でぐだぐだ書いたとおり、現在(Zend Framework 0.1.2)のZend_View_Abstractの実装では、Viewの値を保持する変数である$_varsに、継承したクラスからアクセスできない。
そこで、Zend_View_Abstractを以下のように書き換えて使っている。
- private $_vars = array(); + protected $_vars = array();
Zend_View_Smartyを使うと、呼び出し側のコードは、
$config = array(
'scriptPath' => '/path/to/views', // for Zend_View
'compile_dir' => '/path/to/templates_c', // for Smarty
);
$view = new Zend_View_Smarty($config);
$view->foo = 'FOO';
$view->now = time();
echo $view->render('template.tpl');
というように、通常のZend_Viewを使った場合と同様に書ける。一方呼び出されるテンプレートファイルtemplate.tplは、
<p>foo is {$foo|escape}.</p>
<p>now is {$now|date_format:'%D %T'}
なんてSmarty記法を使って書ける。
Smartyのキャッシュ機構を使いたい場合は、以下のようになる。
$config = array(
'scriptPath' => '/path/to/views', // for Zend_View
'compile_dir' => '/path/to/templates_c', // for Smarty
'cache_dir' => '/path/to/cache', // for Smarty
);
$view = new Zend_View_Smarty($config);
$view->getSmarty()->caching = true;
if (!$view->isCached('template.tpl')) {
$view->foo = 'FOO';
$view->now = time();
}
echo $view->render('template.tpl');
キャッシュ制御にcache_idやcompile_idを使いたい場合は、isCachedやrenderの引数として渡すのではなく、$view->setCacheId('[CACHE_ID]')や$view->setCompileId('[COMPILE_ID]')などのセッタメソッドを使って、あらかじめViewオブジェクトにセットする。あと上記サンプルコードにもあるけれども、$view->getSmarty()でViewの内部にもつSmartyオブジェクトにアクセスできるんで、Smartyに関する細かい制御を行いたい場合は、それ経由で行えばいい。
また、SmartyからZend_Viewの機能にアクセスするためのSmarty用のプラグインも作ってみた。helperプラグインは、
{helper name="[HELPER NAME]" params....}
という記法で、Zend_Viewのhelper機能を呼び出すことができる。また、renderプラグインは、
{render file="[TEMPLATE_FILE]"}
という記法で、Zend_Viewのrenderメソッドを呼び出すことができる。
Smartyにも標準でincludeのような外部テンプレートを呼び出す機能は用意されているが、SmartyのincludeだとSmartyオブジェクトのtemplate_dirをベースにテンプレートファイルが検索されることになる。一方Zend_View::renderではaddScriptPathなどによる複数ディレクトリからのテンプレートファイル検索が行われるので、テンプレートファイルのパスの問題を一元化するために、renderプラグインを経由した方がいい。
といった感じで、Zend_Viewのインターフェースや機能を一通り使いつつも、Smartyの機能も一通り使えるようなViewクラスを作ってみたわけだけれども、実際問題Zend Framework 0.1.2の実装ではこういう書き方はできないわけで、できればその辺を何とかしてもらいたい。もうちょっといろいろ試してみてから、MLにでもその辺の話を投げてみよう。誰か代わりに投げてもらってもいいです。英語で書くのめんどい。
MLに投げた
いい反応があるとうれしいんだけど。
_ [PHP][PHP5][Zend Framework] Zend Frameworkをどう使うか その9だっけ?
っつーかZend FrameworkのControllerとView以外の構成要素は、単に今時っぽさ+重要度の高さ順にピュアPHP5で書きおろしている、PEARライブラリの焼き直しみたいなもんだよなー。
PEARがPHP4の負の遺産を継承してしまってPHP5フル対応が進まないんで、もうPEARをPHP5用としても継続させるのはあきらめて、PEAR相当のライブラリのピュアPHP5版をこっちで再構築するつもりなのじゃなかろうか。ただ、そういっちゃうとPEAR関係者ともめそうだから、「こっちはライブラリ集ではなくて、フレームワークなんです。別物です」と言い張るために、Zend Frameworkという名前を付けたとか(邪推)。
まあそれはそれでいいんだけど、PEARよりもZend Frameworkの方がライセンスとかの扱いが怪しいのが気になるなー。各ソースのヘッダに書かれているライセンスのURLはNot Foundだし。まあ配布アーカイブにはLICENSE.txtが入っているけど。
ところでこのZend Framework Licenseって、Zend Framework全体ではなく、構成するライブラリ単体にも適用されるんだよね。Zend_View_Smartyみたいなコードは、Zend_View_Abstractを継承しているからZend Framework License 1.0のソースに依存しているわけだけど、Zend_View_Abstract自体を再配布しているわけじゃないから、Zend Framework Licenseの影響は受けないよね。Zend Framework Licenseなコード自体を改変したりして再配布する際には、Zend Framework Licenseを維持する必要があるんだろうけど。
とかいうライセンス話はおいておいて、一応ControllerとView以外の構成要素も一通り見ていくか。