FMCakeMixのUser Guide.pdfを参考に、CakePHP x FileMakerでWebアプリの作成方法を紹介する。FX.phpに添付されているFileMakerファイルをベースに、Paginationを使った一覧画面の実装方法を。5回目よりCakePHP, FMCakeMixの規約を紹介。全開は規約にしたがったFileMakerデータベースを作成した。今回からはいよいよPHPの実装について触れていこう。まずはデータベース設定、モデルからだ。
Hello, FMCakeMix! チュートリアル / データベース接続、モデルの記述例
まずはデータベース設定をapp/config/database.phpに記述する。記述する内容はHello, FMCakeMix! チュートリアル(1)で紹介したとおり。ここではファイルの固有情報など、変更があった点のみを紹介する。
- login: データベースに接続するためのアカウントユーザ名を定義。Web公開からFileMakerファイルにアクセスできるユーザIDを使用する。"fmcakemix_user"と指定
- password: データベースに接続するためのアカウントパスワードを定義。"fmcakemix_password"と指定
- database: データベース名(FileMakerファイル名)を定義。&qupt;fmcakemix_db"と指定
データベースコンフィグ記述例 - app/config/database.php
var $default = array
(
'driver' => 'fmcakemix',
'dataSourcetype' => 'FMPro7',
'persistent' => false,
'scheme' => 'http',
'host' => '127.0.0.1',
'port' => 80,
'login' => 'fmcakemix_user',
'password' => 'fmcakemix_password',
'database' => 'fmcakemix_db',
'prefix' => '',
'encoding' => 'utf8'
);
モデルの記述例
次にモデルを作成する。
- booksモデル: /app/models/book.php
- authorsモデル: /app/models/author.php
モデル内では使用するデータベース設定、プライマリキー、デフォルトでアクセスするFileMakerレイアウトなどを指定する。今回はこれらに加えて、簡単なバリデーションを追加してみよう。バリデーションルールはvalidateにフィールド名とルールを組みあわせた配列で指定する。
$validate = array
(
'title' => 'notEmpty'
);
たとえば上記の例の場合、レコードを登録・編集する際、titleが空欄ではないことが条件となる。1つのフィールドに複数のルールを定義することも可能だ。FileMakerの「入力値の制限」で同様の実装が可能だが、こちらは
- 組み込みで用意されているバリデーションルールが豊富
- バリエーションルールを独自に定義可能
- エラーメッセージをカスタマイズ可能
- FileMakerにクエリを投げる前にチェックが可能
といった実装面、パフォーマンス面でメリットがある。
組み込みで用意されているバリデーションルールは次のとおり(一部を抜粋)。
- alphaNumeric: 半角英数字のみを許可
- between: データの文字列長が指定された範囲内におさまっているかを確認
- blank: 空欄またはホワイトスペースのみで構成されているかどうかを確認
- boolean: true, false, int/string型の0か1のみを許可
- cc: クレジットカードの番号として適切かどうかを確認
- comparison: 数値を比較
- date: 有効な日付フォーマットかを確認
- decimal: 少数かどうかを確認
- email: 有効なメールアドレスフォーマットかを確認。第一引数にtrueを指定した場合、ホスト名が存在するかを確認する
- equalTo: データと第一引数が値と方の両方で同じかどうかを確認
- extension: ファイル名の拡張子が指定されたものにマッチするかを確認
- ip: データがIPv4の形式であるかを確認
- isUnique: ユニークかどうかを確認。FileMaker入力値の制限「ユニークな値」に相当
- minLength: データの最低文字列長を指定。FileMaker入力値の制限「下限値」に相当
- maxLength: データの最大文字列長を指定。FileMaker入力値の制限「上限値」に相当
- money: 値が金額として有効かどうかを確認
- multiple: 複数選択するデータ入力のバリデーションに使用
- inList: あらかじめリストで定義したデータのみを許可
- numeric: 数字または数値形式のみを許可
- notEmpty: 空欄不可。FileMaker入力値の制限「空欄不可」に相当
- url: 有効なURLフォーマットかを確認
今回はbooksのtitle、authorsのnameを空欄不可とする。
booksモデル記述例 - /app/models/book.php
<?php
class Book extends AppModel
{
var $name = 'Book';
var $useDbConfig = 'default';
var $defaultLayout = 'books_list';
var $validate = array
(
'title' => array
(
'rule' => 'notEmpty',
'message' => '書籍名はかならず入力してください。'
)
);
}
authorsモデル記述例 - /app/models/author.php
<?php
class Author extends AppModel
{
var $name = 'author';
var $useDbConfig = 'default';
var $defaultLayout = 'author_list';
var $validate = array
(
'name' => array
(
'rule' => 'notEmpty',
'message' => '著者名はかならず入力してください。'
)
);
}
books、authorsともにmessageで空欄だった場合のエラーメッセージをカスタマイズしている。レコード登録時にこれらのフィールドが空欄だった場合は、このメッセージが表示される。
次回はレコードを登録するコントローラとビューの記述例を紹介する。