2010年1月24日日曜日

Zend_Db_Table(その1)

Zend Frameworkに用意されているO/Rマッパー。

DBで定義しているテーブルに対して1対1で対応するZend_Db_Tableを継承するクラスを定義する。

hogehogeテーブル<=>hogehogeクラス

(コード例)
$hote=new Hoge_Table();

//主キーによる検索
$hoge->find("値");
//追加
$hoge->insert(array("列名1"=>"値","列名2"=>"値"));
//更新
$hoge->update(
 array("列名1"=>"値","列名2"=>"値"),
 $hoge->select()->where("列名=?"="値")
);
//削除
$hoge->delete($hoge->select()->where("列名=?"="値"));


主キーによる検索などは、Zend_Db_Tableに用意されているメソッドを使い、アプリケーションに必要処理だけコーディングすることで、シンプルなコードにできる。

Zen_Db_Tableの抽象化対象となるテーブルは、主キーとして、自動生成できるシーケンスを前提といる。
このため、DB設計をする際に、そのあたりを考慮しておくとコーディングが楽になる。
#そうでないテーブルも主キーに関する定義をすることで、当然対象にできる。

テーブル間のリレーションをクラス定義する際に、指定することで、検索結果などで取得できるZend_Db_Table_Rowクラスから関連するテーブルの情報を簡単に取得することもできる。

2010年1月19日火曜日

FirePHPは便利

FirePHPは、FirefoxのアドオンのFirebugの機能拡張で、インストールすることで、サーバ側の出力をFirebugのコンソールに出力できる。

HTTPヘッダーを利用しているようで、試してませんが、Ajaxの通信などでHTMLをブラウザに出力しない場合でも利用できるそうです。
Zend Frameworkのコンポーネントでは、Zend_logやZend_Db_Profilerなどで、出力先をFireBugのコンソールにできます。

(1)ログを内容を出力する
ログライターにZend_Log_Writer_Firebugを利用する。

$writer=new Zend_Log_Writer_Firebug();
$log=new Zend_Log($writer);
//日本語出力もOK
$log->info("日本語もOK");

日本語の出力も問題なくできました(UTF-8だけしか試してません)

(2)DBのプロファイルを出力する
プロファイラーに Zend_Db_Profiler_Firebugを設定する。

$db=Zend_Db::factory('Pdo_Pgsql', array(
 host=>'hogehoge',
 username=>'dbuser',
 password=>'dbpass',
 dbname=>'sampledb'
));
$profiler=new Zend_Db_Profiler_Firebug('All DB Queries');
$profiler->setEnabled(true);
$db->setProfiler($profiler);
Zend_Db_Table_Abstract::setDefaultAdapter($db);


Firebugのコンソールではテーブル構成で結構見やすい。

自分の環境では、なぜか、ページを出力しただけではコンソールに出力されず、その状態で一度Firebugをオフ/オンして再表示するとコンソールに表示される。
まだ安定してないのか、設定がよくないのか・・・・。
(追記)Firebugを1.50に更新したら直った。

Zend Framework 1.9.7などなどリリース

Zend Framework 1.9.7がリリースされてました。

他にも、1.8.5,1.7.9と古いバージョンのリビジョンがあがっています。
XSS関連の問題の修正がされているようです。

Zend_SessionでCookieを使用しないセッション管理

デフォルトはCookieを使うようになっているので、php.iniもしくは.htaccessで使用しないように設定。
勝手にURLにセッションをつけない様にする。セッションIDの名称変更。

.htaccessの記載例)

php_value session.use_cookies 0 #Cookie利用しない
php_value session.use_only_cookies 0 #Cookie以外も利用
php_value session.use_trans_sid 0 #URLへの自動付与OFF
php_value session.name hogesession #セッションID名称を変更


Zend_Sessionでセッションをスタート

Zend_Session::setOptions(array(use_only_cookies=>'off'));
Zend_Session::start();
$session=new Zend_Session_Namespace('hoge');


Zend_Sessionでは、use_only_cookiesがデフォルトでONに設定されるようで、.htaccessでoffにしていても、ONになってしまうので、Zend_Session::startの引数で必ずオプションを設定しておいたほうがいい。

.htaccessで設定したほうが、プログラム内で設定するよりもいいと思うけど、Zend_Sessionが動作する際に、上書きしてしまうので、すべてZend_Sessionのパラメータで設定するのでもいいかも。

Zend_Sessionを利用する場合は以下は必ず必要なので忘れずに。
php_value session.auto_star 0 #セッション自動開始OFF

そのほか指定しそうなパラメータ

・有効期間
php_value session.gc_maxlifetime 1800 #有効期間を30分

・セッション情報保存先を指定(ファイルに出力する場合)
#/tmp/php/hogeディレクトリへ出力 書き込み権限は必要
php_value session.save_path=/tmp/php/hoge



Zend_Sessionを利用する際にしてはいけないこと。
・session_start関数は使用しない。
・Zend_Session::start()使用やZend_Session_Namaspaces()の生成などは、Zend_Session関連のそのほかの操作の前には必ず処理をさせておく


view部分で、セッション名称やセッションIDをを取得するには、以下の関数から取得する。
セッション名:session_name();
セッションID:session_id();

2010年1月8日金曜日

ひさびさにフリーのER図作成ツール

以前からEclpiseで利用していたDBモデリングツールのClay(1.4.2)をEclipse3.5で使おうとしたら動かなかったので、別のものを探してみました。

とりあえず、PostgreSQLに対応していて、DDLが出力できるもの。
さらにER図の画像出力や、テーブル定義をドキュメント出力してくれるとうれしい。

[Clay MarkII]
http://www.azzurri.co.jp/ja/clay/index.html

Clayが2009/8くらいにMarkIIになってました。#ガンダムか?
試しに、旧バージョンのファイルを読み込ませてみたら、テーブルの配置がすべて左上になってました。
PostgreSQLの対応は7.3,7.4で旧版と変わらず。このあたり8.x対応になったりしないのかな?
見た目は前よりもリッチ感(?)があるように思えました

有償版はライセンスの形態が変更になっていて、従来のインストールベースから、プロジェクトベースになっており、お値段も8万4千円とお高くなってます。
前バージョンは会社でライセンスを買っていましたが(確か3万円弱だったような?)、1人か2人くらいで開発することが多いので、前バージョンよりも割高感があります。

前バージョンは直接ダウンロードできず、プラグインの入手方法は「注文番号を添えて問い合わせてください」って書いてありました。


[ERMaster]
http://ermaster.sourceforge.net/index_ja.html

使い方はClayとほとんど変わらず、迷わず使えました。

Entityの色やデザインを変更できたり、Entityに表示するレベルを変更できたりします。
ExcelやHTMLでテーブル定義書っぽいものを出力できるので、体裁を整えるにはいいかも。
あと、辞書機能は便利でした。
ClayMarkIIよりも好みにあっているので、とりあえずERMasterを使ってみようと思います。

本当はNetbeans6で利用できるものがあればよかったんだけど、見つからず。
知っている人がいたら教えてほしい。

2010年1月6日水曜日

ExtJS3.1がリリースされてました

IE6のメモリリークに関する対応がなされた模様。
その他、新しいUIも追加されているようです。

Zend Framework 1.9.6リリース

Zend Framework 1.9.6リリースがリリースされてました。
次は1.10.1になりそうです。