Zend_ViewでSmartyをラップする

これを知るまで、Contorollerで、Smartyクラスを生成して使っていたけど、
Zend_Viewのドキュメントに記載されていた、Smartyをラップする
Zend_Viewクラス(ex Zend_View_Smarty)を作成して、これを利用することで、
Smartyの便利さはそのままに、テンプレートへの値の設定がさらに楽に!!!

簡単に言うと、$key っていう変数に、$valueを設定しようとした場合、
$this->_smarty->assign($key, $value);
と書いていたのが、
$this->_view->$key = $value;
ってかけるようになるんです。
assignの記述で、よくスペルミスしていた私には、重宝する機能です。

smartyの設定(delimiterとか)も、連想配列にして、Zend_View_Smartyクラスの
生成時に、第2パラメタとして渡したら有効になります。
テンプレートへのパスも、setScriptPathではなく、生成時に設定した方が楽です。

すでに、Zendで、Smartyを使っている方でも、変更量は少なくてすみますので、
試す価値有りと思った方は、ぜひおためしくださーい。

この方法を採用していると、テンプレートエンジンを変更しようとおもった際の
ソースの改修もラッパークラスを変更するだけですみます。
テンプレートは大幅な改修になることは、避けられませんが。

DB操作にしても、変数に代入するイメージで、設定できるっていう
Zendの特徴を生かしたSmartyとの連携方法だと思います。

これをやったら、既存のZend_Viewのように、Zend Frameworkが、
Zend_View_Smartyを生成して、テンプレート特定して、画面表示までを
やってくれないかなーという欲がでてきました。
Zend_Controller_Actionを継承して、initViewあたりを再定義したら、
できそうだけど、他にもっと楽な方法がないか探して見ます。

存在しない、URLが指定された場合、action名の方は任意の処理を
入れれる方法がわかっているのですが、controller名が存在しない場合は、
エラーになるだけなので、ここをどうにかしたいところです。

Front Controllerを継承したクラスを作るのはちょっとおっくうなので、他の方法で。

中目黒あきら

月の中旬は、普段とは違うおいしいものを食べに行く時期になっている。
今回は【中目黒あきら】っていう、鶏料理のお店。
オススメは、チキン南蛮。

以前に食べにいった、中目黒の宮崎料理のお店【よだきんぼ】の
チキン南蛮が絶品で、うますぎたから、今回も楽しみにしてお店へ。

ここのチキン南蛮もうまい!!
衣自体に味がついているようで、甘酸っぱい感じがとても好き。
あと、鶏の刺身をわさび醤油で食べたのと、白菜のサラダ??がうまかった。
この3つを食べに行くのを目的にしてもいいと思う。

今回は、最後のご飯に、照り焼き丼を選んだけど、卵ご飯がボリューム的にちょうどよかったかも。
要は、うまかったんで、全体的に食べ過ぎました。

行くときは予約をしてから、行った方がいいですよー。
目黒川沿いなので、桜の季節に窓際に座れたなら、贅沢な時間が過ごせそうです。

Zend_Config_Iniの使い道

Zend_Config_Iniは、設定値や固定のプルダウンメニューリストを定義するのに便利です。

まずは、iniファイルを定義します。

[default] ←ブロック名

database.adaptor         = Pdo_Mysql
database.config.host     = localhost
database.config.username = user
database.config.password = password
database.config.dbname   = test

menu.0        = menu0
menu.1        = menu1
menu.2        = menu2

それをプログラムにて、Zend_Config_Iniクラスを生成する際に読み込みます。

$config = new Zend_Config_Ini(iniファイル名(パス含む), 'default');

$config->database->adaptor

で、”Pdo_Mysql”にアクセスできます。
また、$config->database->config->toArray()とすると、

array(
'host' => localhost,
'username' => user,
'password' => password,
'dbname'   => test
);

が取得できます。

また、menuの例だと、
$cofig->menu->0
とアクセスすると、エラーになります。
数字1文字は変数名として認められないようです。
しかし、$config->menu->toArray()は有効になるので、
添え字が数字の固定配列を定義するのには使えます。
これは、結構便利なんじゃないかと思います。

今は、Zend_Validateクラスを試しています。
自分で入力チェックするのと手間はあんまり変わりませんが、
バリデータチェインは便利ですね。

今回のドキュメントは、こちらです。

Zend_ControllerとRequestクラス

Actionコントローラーの中で、
$this->getRequest()
と書くと、リクエストオブジェクトが取得できる。

$_POST、$_GETの情報も、Controller名、Action名もこの中。

$this->getRequest()->getPost();
$this->getRequest()->getQuery();
$this->getRequest()->getControllerName();
$this->getRequest()->getActionName();

$_GETは、ちょっとメソッド名がイメージしづらいけど、ここは覚えるのみ。
getPost()、getQuery()は、パラメタにキーを渡すと、キーに対応する値を取得してくれる。

それ以外にも、setParam($key, $value)で、リクエストオブジェクトに値を設定可能。
これは、いつでもgetParam($key)で取得可能。
getParam()だと、$_POST、$_GETのパラメタも取得可能ですが、
getUserParam()だと、setParam()で設定した値のみが取得可能。
ここは使い分けた方が、プログラムの可読性が増すかなと思います。

あと、発見だったのが、Zendでは、
http://test.com/controller名/Action名/key/value/ 【1】
というようにパラメタを渡せます。
http://test.com/controller名/Action名/?key=value 【2】
としても渡せます。

この場合、【1】の場合は、keyはsetParamで設定したものと同じように扱われおり、
【2】の場合は、$_GETに設定されています。
パラメタの記述方法で、保存される場所が変わるので、気をつける必要があります。

次回は、便利だなと思った。Zend_Config_Iniについて書こうかなと思います。

今回書いたことは大体、ZendFrameworkのドキュメントに書いてあります。
ドキュメントは、こちらです。

逃げと引き際の違い

どこからが逃げで、どこまでが引き際がいいとされるところなのか。

ここ数ヶ月、クラブでDJをやっていて楽しくないことが多い。
自分の納得できるプレイができていないことが原因なのはわかっている。

モチベーションの問題なのか、自分の好みが変わってきたのか、
それすらまだ掴みきれていない。
一旦休憩とできたら楽なのかもしれないけれど、一旦かかわるのを止めたら、
きっと復帰するのはとても難しい。
クラブでプレイしたいDJなんて、いくらでもいるから。
やろうと思ったときには、やらせてもらえる場がないということになるだろう。

あれこれやってみて、どこかからとっかかりを見出せたらと思う。

初めてプレイしたクラブの店長さんも言っていた。
絶対に誰にでも、何をかけてても全然楽しいと感じれない、
むしろつらいと思う時期が来る。しかも何回も。
でも、それを乗り越えれた人だけが、今もプレイし続けていると。

ZendとcakePHP

Zendで、メール送受信と、DBアクセスができるようになったから、
cakePHPで同じことをやるにはどうするんだろうと、cakePHPガイドブックを読んだ。

cakePHPには、メール送信用のコンポーネントがない。1.2で追加される予定だそうだ。
DBアクセスのところを見たら、cakePHPの方クラスをnewする必要がなく、
利用するクラスとして宣言したら、$this->クラス名として呼び出せるという違いくらい。

ZendのコンポーネントをcakePHPからも利用できるから、cakePHP+Zendという
選択肢もあるし、cakePHPを利用するなら必須になると思う。

DBアクセスのための関数は、cakePHPの方が種類が多い。
DBアクセスについては、好みの問題になるんじゃないかと思う。
私は、今のところZendのDBアクセスの方が好きだ。

機能面の充実をとるならZend、ソースの自動生成(scaffloIdやbake等)に
魅力を感じるなら、cakePHPだと思う。
scaffloIdは、かなり強力な魅力だ、公開しないページならこれで十分なときもあるだろう。
まだView部分をどちらも見ていないから、そこで差がでてくるのかもしれない。
クラス設計は、cakePHPの方がユーザがカスタムすることを前提で、空クラスが
準備されているから、どこをいじればいいのかがわかりやすい印象。
Zendでも自分で、共通クラスを生成したら、差はないと感じた。

Zendを引き続き使いながら、不便だな、便利だなと思った点がでたら、
cakePHPではどのようになっているかを調べるという方法ですすんでいこうかと思う。