WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート Zend Framwork

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

Zend_Dateの`get()`や`toString()`にフォーマットを渡して日付の文字列を取得できますが、ある月の最後の日を取得できます。


$date = new Zend_Date();
$last_day = $date->get('ddd');


`ddd`で取得可能です。

    このエントリーをはてなブックマークに追加

Zend Framworkのルート設定で勘違いしていた所があったので書いておきます。
(私の使用環境ではyamlでルートを書けるようにしてるので、随時読み替えてください)
たとえば
/shinjuku/
/shinjuku/shops
この二つのURLをAreaSiteControllerに持って行きたい時


mb_area_site_index:
route: /:group/
defaults:
module: mobile
controller: area-site
action: index

mb_area_site:
route: /:group/:action
defaults:
module: mobile
controller: area-site
と二つルートを書いてたのですが、これは

mb_area_site:
route: /:group/:action
defaults:
module: mobile
controller: area-site
action: index
これ一個だけでOKです。:actionのプレースホルダを書いておいて、デフォルトのアクションを指定しておけば、省略時にそっちに行きます。

    このエントリーをはてなブックマークに追加

アクション内で現在のルートを使用して、別のURLのmodule・controller・actionの名前を取得する方法です。


$req = new Zend_Controller_Request_Http("http://***.***.***/test/action");
$this->getFrontController()->getRouter()->route($req);
あとは$reqから取得できます。

    このエントリーをはてなブックマークに追加

phpunitを使ってユニットテストを行いながら開発をしています。データーベース関連のテストで、クエリの数を数えたかったのですが、そのまま使うと、他のテストで発行したクエリまで数えてしまいます。そこで、問題のテストの最初で新しいZend_Db_Profilerのオブジェクトをセットしてやると、新規でログをとり始めるので、うまくできました。


$db = $select->getAdapter();
$old_prof = $db->getProfiler();
$db->setProfiler(new Zend_Db_Profiler(true));

//ここでDBにクエリを発行していろいろ実行

$prof = $db->getProfiler();
$prof->setFilterQueryType(Zend_Db_Profiler::SELECT);
$this->assertTrue(1 == $prof->getTotalNumQueries());
$db->setProfiler($old_prof);
これで、今回のクエリーだけカウントが取れます。ただ、全体のログから、今回のログが除かれてしまいます。戻せそうだなあと思い、コードを追ってみた結果、これを$old_profに戻すのはZend_Db_Profilerでは難しそうです。

//↑の$db->setProfiler($old_prof);の前で
foreach($prof->getQueryProfiles(Zend_Db_Profiler::SELECT) as $query)
{
$id = $old_prof->queryClone($query);
$old_prof->queryEnd($id);
}
$db->setProfiler($old_prof);
これで、一応戻せます。しかし実行時間がおかしなことになります。問題なのはクエリを外から加えるメソッドがqueryCloneしかなく、Zend_Db_Profiler_Queryはcloneの中でかかった時間をクリアしています。で、queryEndで終了させてやれば出るのですが、実行時間がqueryCloneを実行してからqueryEndが実行されるまでの時間になってしまいます。
現状ではZend_Db_Profilerを継承したクラスを作ってクエリリストにそのまま、加えられるようにしないとだめそうです。

    このエントリーをはてなブックマークに追加

Zend_CodeGeneratorを使うと簡単にPHPのクラスコードファイルを生成できて便利なのですが、クラスのプロパティの値にture、falseを使うと例外を投げます。


$file = new Zend_CodeGenerator_Php_File();
$class = new Zend_CodeGenerator_Php_Class();
$class
->setName('Test');
->setProperties(array(
array(
'name' => '_bool',
'visibility' => 'protected',
'defaultValue' => true,
));

$file->setClass($class);
$file->generate();
//例外
//Exception : I dont know this type
今のところだめっぽいので下のようにしてお茶を濁しました

->setProperties(array(
array(
'name' => '_bool',
'visibility' => 'protected',
'defaultValue' => '%TRUE%' ,//'%FALSE%'
));

$code = str_replace(
array("'%TRUE%'", "'%FALSE%'"),
array('true', 'false'),
$file->generate()
);


2010/12/18追記
見逃してたようで、たぶん?やり方が分かりました。

->setProperties(array(
array(
'name' => '_bool',
'visibility' => 'protected',
'defaultValue' => new Zend_CodeGenerator_Php_Property_DefaultValue('true'),
));
実はプロパティは試してなく、試したのはZend_CodeGenerator_Php_Parameter_DefaultValueの方ですが、間違いないでしょう。これでいけるはずです。


    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。