FileMaker Webアプリを実装するにあたり、FX.php, FileMaker API for PHPの使い方やパフォーマンス比較を紹介してきた。今回から徐々にではあるが、FMCakeMixの紹介をしていきたいと思う。FMCakeMixは今日も改良が続けられているオープンソースソフトウェア。まずは最近のバージョンで変化があった点を取りあげていこう。
FMCakeMixとは
FMCakeMixとはPHPフレームワーク「CakePHP」のDBOドライバのひとつ。おなじみFX.phpを使用して、FileMaker Server/FileMaker Web公開エンジンと通信をおこなう。DBOドライバとして動作するため、編集・削除などレコードIDが要求される一部の動作を除いて、バックエンドのデータベースを意識しないコーディングが可能となる。
過去に日本語環境下で利用する場合の注意点を「番外編: CakePHPでFileMakerを使う方法」としてまとめたので、こちらもあわせて参照されたい。 FMCakeMixはBeezwax(Alex Gibbons氏)を中心に開発・リリースがおこなわれており、最新のバージョンは6月17日(米国時間)にリリースされたもの。The MIT Licenseのもとで公開されているオープンソースソフトウェア。最近のバージョンで追加・変更されたおもな機能は次のとおり。(コミットログより一部を抜粋、日時はすべて米国時間)
- データベースレベルでdefaultLayoutを指定できるように (6月17日、Alex Gibbons氏)
- -sortfieldパラメータのスペリングエラーを修正 (6月17日、Atsushi Matsuo氏)
- フィールド内容が空の場合に表示されていたエラーメッセージを非表示に (6月17日、Atsushi Matsuo氏)
- 値一覧のサポート (5月11日、Alex Gibbons氏)
- OR検索のサポート (5月11日、Alex Gibbons氏)
- FileMakerスクリプト実行のサポート (5月11日、Alex Gibbons氏)
- 文字コードの取扱いを改善 (5月11日、Alex Gibbons氏)
データベースレベルでdefaultLayoutを指定できるように
defaultLayoutとはFileMakerにアクセスする際、処理の中心となるレイアウトのこと。これまでこのdefaultLayoutはモデル(/app/model/*.php)で指定していたが、これをデータベースレベル(/app/config/database.php)でも指定できるようになった。
モデルでのdefaultLayout指定例
class Book extends AppModel
{
var $name = 'Book';
var $useDbConfig = 'default';
var $primaryKey = 'ID';
// FMCakeMix specific attributes
var $defualtLayout = 'web_books_general';
var $fmDatabaseName = 'FMServer_Sample';
// Optionally assign related models
var $hasMany = array
(
'Comment' => array
(
'foreignKey' => '_fk_book_id'
),
'History' => array
(
'foreignKey' => '_fk_book_id'
)
);
// Optionally provide translations of related FileMaker table occurrences
// that may be returned through FileMaker portals into Cake model names
var $fmTOtranslations = array
(
'CommentsTO' => 'Comment'
);
// Optionally provide validation criteria for our model
var $validate = array
(
'Title' => array
(
'rule' => 'notEmpty'
),
'Author' => array
(
'rule' => 'notEmpty'
)
);
}
データベースでのdefaultLayout指定例
var $default = array
(
'driver' => 'fmcakemix',
'persistent' => false,
'dataSourceType' => 'FMPro7',
'scheme' => 'http',
'port' => 80,
'host' => '127.0.0.1',
'login' => 'myUserName',
'password' => 'myPassword',
'database' => 'FMServer_Sample',
'prefix' => '',
'defualtLayout' => 'web_books_general';
);
データベースレベルでdefaultLayoutが指定されていない場合は、モデルで指定したdefaultLayoutが適用される。なお、いまのところレスポンスレイアウトの指定(responseLayout)には対応していない。レスポンスレイアウトはFileMaker Webアプリを高速化するにあたり必須といえるパラメータ。すぐに使用したい場合は、dbo_fmcakemix.phpのSetDBData()が使われている箇所を中心にカスタマイズする必要がある。
値一覧のサポート
値一覧を取得したいモデル(/app/model/*.php)に「var $returnValueLists = true;」の一文を加えることで、スキーマに値一覧情報が格納されるようになる。値一覧を使用したいコントローラ(/app/controller/*.php)でスキーマ情報を取得し、set()でビューに渡してやることで値一覧の中身を使うことが可能になる。モデル側でvar $returnValueLists = true;の一文を追加をしていないと、スキーマ情報に値一覧が格納されないので注意されたい。
OR検索のサポート
コントローラ(/app/controller/*.php)で検索をおこなう際に$conditionsに「or」という文字列を渡してやることで、OR検索になる。このOR検索はFX.phpのSetLogicalOR()を使用している。
FileMakerスクリプト実行のサポート
次の6種類のFileMakerスクリプト実行パラメータに対応した。
- -script
- -script.prefind
- -script.presort
- -script.param
- -script.prefind.param
- -script.presort.param
これらはFX.phpのPerformFMScript(), PerformFMScriptPrefind(), PerformFMScriptPresort()のように専用のメソッドを使用するのではなく、AddDBParam('-script', 'スクリプト名')のように$conditionsにそのまま渡して使用する。
進化の早いFMCakeMixだが、データベースを意識しないプログラミングができるようになるメリットは非常に大きい。コミットログと一緒につねに最新版をチェックし、ソースコードを読みながら実際にコーディングしてみることが習得の近道だ。