FileMaker Webアプリを実装するにあたり、FX.php, FileMaker API for PHPの使い方やパフォーマンス比較を紹介してきた。今回より、FMCakeMixの使ったFileMaker Webアプリの開発やソースコードリーディングを取りあげていこう。まずは環境構築~チュートリアル編から。
Hello, FMCakeMix! チュートリアル
FMCakeMixのUser Guide.pdfを参考に、CakePHP x FileMakerでWebアプリの作成方法を紹介する。紹介するのは、CakePHPのPaginationという機能を使った一覧画面だ。今回はファイルのデプロイ、データベースの準備、データベース接続設定、モデルの定義までを紹介する。
まずは必要なファイルをすべてダウンロードし、特定のディレクトリに展開する。動作に必要なライブラリ、PHPファイルは次のとおり。
- FX.php
- CakePHP
- FMCakeMix (dbo_fmcakemix.php)
- (必要に応じて) FX_patched091010.zip
まずはこれらのファイルをWebサーバに展開する。ファイルのダウンロード先や展開の手順については「番外編: CakePHPでFileMakerを使う方法」を参照されたい。
ファイルの展開が完了したら、続いてデータベースファイルを公開する。FX.phpのパッケージを解凍して生成されるDatabases/Book_list.fp7を、FileMaker Serverのデータベースフォルダに配置する。配置後、FileMaker Server Admin Consoleを使ってファイル公開を実施。
CakePHPの規約に従うよう、Book_Listを公開後、FileMakerファイルを開いてテーブルに「id」フィールドを追加しておく。Book_ListとDetail_Viewの両レイアウトに「id」フィールドを配置し、全置換を使ってレコードID(シリアル値)を入力する。
必要なPHP・データベースファイルの展開が完了した。それではここから、FMCakeMixのUser Guide.pdfを参考に、実際に一覧画面を作成してみよう。
データベース設定を変更
User Guide.pdf P.4 - Define Your Database Connectionより。データベースに接続するための設定を、app/config/database.phpに記述する。設定項目は次のとおり。
- driver: 使用するDBOドライバを定義。FMCakeMixを使用するので、"fmcakemix"と指定
- persistent: 持続的接続をするかどうかを定義。"false"を指定
- dataSourceType: FMCakeMix(FX.php)用の設定値。FileMakerファイル形式を定義。"FMPro7"と指定
- scheme: データベースに接続するためのスキーマを定義。"http"と指定
- port: データベースに接続するためのポート番号を定義。"80"と指定
- host: データベースサーバのホスト名またはIPアドレスを定義。"127.0.0.1"と指定
- login: データベースに接続するためのアカウントユーザ名を定義。Web公開からFileMakerファイルにアクセスできるユーザIDを使用する。"admin"と指定
- password: データベースに接続するためのアカウントパスワードを定義。""と指定(空欄)
- database: データベース名(FileMakerファイル名)を定義。"Book_List"と指定
- prefix: すべてのテーブルの頭に付ける接頭辞(prefix)を定義。""と指定(空欄)
データベースコンフィグ記述例
var $default = array
(
'driver' => 'fmcakemix',
'persistent' => false,
'dataSourceType' => 'FMPro7',
'scheme' => 'http',
'port' => 80,
'host' => '127.0.0.1',
'login' => 'admin',
'password' => '',
'database' => 'Book_List',
'prefix' => '',
);
モデルの定義
User Guide.pdf P.4~5 - Define Your Modelより。データベースのモデルを定義する。CakePHPのモデルでサポートするリレーションタイプは次の4種類。
- hasOne
- hasMany
- belongsTo
- hasAndBelongsToMany
FMCakeMixはこのうち"hasMany"と"belongTo"の2種類に対応している。今回使用するサンプルのBook_Listは1テーブルなので、とくにリレーションの設定はおこなわない。
このほかの設定項目については次のとおり。
- name: PHP4ユーザ互換性用。モデル名と同じ値を指定
- useDBConfig: データベース設定ファイル内の、どのパラメータを指定するかを定義
- primaryKey: 主キーが「id」ではない場合はここで定義。さきほど「id」フィールドを作成しているため、今回は使用しない
- defaultLayout: FMCakeMix(FX.php)用の設定値。デフォルトでアクセスするFileMakerレイアウトを定義
- fmDatabaseName: FMCakeMix(FX.php)用の設定値。FileMakerファイル名を定義
モデル記述例
class Book extends AppModel
{
var $name = 'Book';
var $useDbConfig = 'default';
// FMCakeMix specific attributes
var $defualtLayout = 'Book_List';
var $fmDatabaseName = 'Book_List';
}
CakePHPをはじめて触る方はマニュアルを熟読しておこう。CakePHPは設定より規約(convention over configuration)という考え方をもとに作成されている。既存のFileMakerデータベースをFMCakeMixでWeb化する前に、CakePHPの基本原則に目を通しておきたいところだ。