ZendAMFを使ったPHPとFlashBuilderの連携もなんとか手懐けて来た。
結局、データとサービスを利用してデータベースの構造から自動的にPHPサービスを作成する方法は止めた。
これでサービスを作るとわけわからんASのクラスが沢山できるのと、PHP側のスクリプトの出来が悪いからだ。
通常、mySQLを利用する様になっているのだが、自動的に作られるPHPサービスはmysqliを利用するようになっている。
これがイマイチ使い勝手が良くないし、せっかく、ZendFrameworkを利用しているのに、高機能なDB廻りのコンポーネントが利用出来ない。
ということで、自身でZend_DB辺りを使ったPHPサービスを作ったが、これが非常に簡単。
基本的にはZend_Db::factory(‘Pdo_Mysql’,$this->params)と言ったDB関係の初期化を行うクラスを作り、それを継承する形でサービスのクラスを用意すれば良い。
アンダーバーのあるファイル名は駄目な様だ。
このクラスの中に必要なメソッドを書けばOK。
例えば、下の3行でtblで設定したテーブルからデータを検索してくれる。
public function getAllhoge_Master()
{
$sql=’select * from ‘.$this->tbl;
$this->db->setFetchMode(Zend_Db::FETCH_ASSOC);
return $this->db->fetchAll($sql);
}
この様な形でサービスクラスを用意すれば、FlashBuilder側のデータとサービスで新規PHPサービスから利用すれば自動的にAS関係のクラスを用意してくれるので、適当にバインドすれば良い。
以前、WEBORBでRemoteObjectを設定したり、もっと前のPHPOBJECTを利用していた時代を考えると構築の早さと手間は格段に違う。
簡単な動作確認ならばFlashBuilderの「操作をテスト」である程度の事は出来るし、場合によってはPHP側で以下の様なログファイル作成メソッドを用意しておいて必要に応じて渡された変数を確認するなどすれば簡単にデバッグ出来る。
function logMe($var)
{
$filename = dirname(__FILE__) . ‘/__log.txt’;
if (!$handle = fopen($filename, ‘a’)) {
echo “Cannot open file ($filename)”;
return;
}
$toSave = var_export($var, true);
fwrite($handle, “[" . date("y-m-d H:i:s") . "]“);
fwrite($handle, “\n”);
fwrite($handle, $toSave);
fwrite($handle, “\n”);
fclose($handle);
}