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で空欄だった場合のエラーメッセージをカスタマイズしている。レコード登録時にこれらのフィールドが空欄だった場合は、このメッセージが表示される。

次回はレコードを登録するコントローラとビューの記述例を紹介する。