Zend_Registryを使ってみた

2008/05/13 | Zend Framework

異なるクラス間で共通の値を持ちまわりたいときは苦労する。引数で渡すか、グローバル変数として定義するか、方法はいろいろあるが問題もある。

・引数で渡す
いろいろなメソッドで使う場合、その都度毎回引数で渡すのは面倒。
・グローバル変数として定義する
どこかで変数名がバッティングしないかちょっと不安。

そんなのを解決してくれるのがZend_Registryだ。使い方は超簡単。

・変数の登録
Zend_Registry::set(‘変数名’,’変数の値’);

・変数の呼び出し
Zend_Registry::get(‘変数名’);

上記のように直接メソッドを呼んでもいいし、オブジェクトを生成してからメソッドを呼んでもいい。何より、非常に簡単というのが最高にいい。ますますZendに惹かれる今日この頃だ。

Zend FrameworkでどのようにSmartyを組み込むか

2008/05/12 | Zend Framework

先日作ったZend Frameworkウェブアプリだが、実は気になっている部分が一つ。Smartyの使い方というか配置だ。Zend Frameworkのマニュアルには、Smartyを組み込むためのViewスクリプトだけが紹介してある(参照)。しかし、これは単なるスクリプトであって、実際の組み込み方はどこにも書いてない。厳密に言うと、組み込むのはrequireしてオブジェクト生成だが、フレームワーク内での教科書的な組み込み方に関する記述がないのだ。

とりあえず、自分ではZend_Controller_Actionを継承したbaseControllerを作成し、その中でpreDispatchメソッドを定義して、以下のように書いておいた。テンプレートの配置場所とかキャッシュ生成場所とかもルールにのっとって配置するようにした(その他設定はお好み次第で)。

public function preDispatch()
{
  $controllerName  = ucfirst($this->getRequest()->getControllerName());
  $viewDir    = dirname(__FILE__).’/../views';
  $templates_dir  = $viewDir.’/scripts/’.$controllerName;
  $extraParams  = array();
  $extraParams[‘compile_dir’]    = $templates_dir.’/templates_c';
  $extraParams[‘plugins_dir’]    = array(‘plugins’,$viewDir.’/plugins’);
  $extraParams[‘left_delimiter’]  = ‘<{';
  $extraParams[‘right_delimiter’]  = ‘}>';
  
  $this->view    = new Private_View_Smarty($templates_dir<$extraParams);
  $this->view->getEngine()->load_filter(‘pre'<‘convert_encoding’);
}

ただコレだけだと実はNG。例えばVIEWの必要がないアクションを用意した場合、これを組み込んだ基底クラスを継承すると問題が起きる。このメソッドの定義上、該当するテンプレートディレクトリやキャッシュディレクトリが存在しないとおかしなことになるわけだ。

そう考えると、いろいろなエラー制御も含めて、コード自体も設置方法自体も検討しなくてはいけない。悩ましい。

どうせなら、本当に教科書的なものを用意してくれればよかったのにね。

ZendFrameworkでサイトを作ってみた

2008/05/08 | Zend Framework

本を読んだり、資料をあさったりしていても、先へ進めないような気がしたので・・・。ZendFrameworkを使って、実際にサイトを構築してみた(「構築」というほどの大げさなものではないのだが)。コーディングに時間をとられたくなかったので携帯サイトにしてみた。

うちねこ

使用したのは以下の通り。
・Zend_Controller_Action
・Zend_View
・Zend_Db

本当はZend_FormやZend_Mailも使う予定だったのだが、期待通りの動作をしなかったり、早く公開したかったり、とか諸所の理由で最低限のライブラリ群を使用して構築・公開してみた(PEARや一般公開されているライブラリを使用した)。

なお携帯絵文字変換には以下のライブラリを使用した。
MobilePictogramConverter

実際に構築してみると「こんなことができる」「これはできなさそう」「これはバグ?」とか見えてきた。あとは自分なりに使いやすい構成をとれるよう、使い込んでいくだけだ。

Zend_Mimeのバグ?

2008/05/04 | Zend Framework

現在Zend_Mail_Storage_Pop3を使ってメールの受信処理を書いている。しかし使っていくにしたがって、バグっぽい動きをすることがわかった。
添付ファイルつきのメールを受信する際の動作で例外が発生する。具体的にはmultipart/mixedなメールを読み取る際に、boundaryが読み取れる場合と読み取れない場合があるようだ。
boundaryを求める処理は、Zend_Mime_Decodeに処理が委譲され、その中でiconv_mime_decode_headersという関数で処理されているのだが・・・。
問題は「できる」場合と「できない」場合があるということなのだが、まだ原因がつかめない。
まだまだZendFrameworkにはバグが出てきそうだ。

Zend_Formでのファイルアップロード

2008/05/03 | Zend Framework

「ファイルのアップロード」と書いてはみたものの、実は調べたところ現状Zend_Formにはファイルをアップロードするための仕組みは用意されていない。ゆくゆくは機能追加されるとは思うのだが・・・。
HTTPによるファイルアップロード機能自体に、なんらかの仕様変更があるのではないかと推測している。PEARのHTML_QuickFormにはファイルのアップロード機能が用意されていた。しかしマニュアルによると「推奨しない」とか「将来削除される可能性がある」とか書かれていたりする(現在はHTML_QuickFormのアップデートは期待しないので、なくなることもないと思うけど)。推測しかできないので、余計な推測はこれ以上せず、当面は当該機能がある仕組みを使うのみだ。ちなみにHTML_QuickForm2(HTML_QuickFormのPHP5対応版)にはファイルアップロード機能が用意されているので、フォーム関連はこちらを使うことになると思う。

HTML_QuickFormにしてもZend_Formにしてもウェブを検索するとたいてい評判がよくない。たしかに癖のあるライブラリだとは思う。しかし、かといってフォーム関係ライブラリで有用なものが他にあるわけではないので、現状では貴重なライブラリ群だ。だいたい文句を言っている人は、使いこなせないから文句を言っているのだとは思うが・・・。文句があるならライブラリを自作して公開するとか、代替案を提示してほしいよね(問題点の指摘は大いに結構だけど)。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net