CodeZine(コードジン)

特集ページ一覧

カスタム関数を作って効率的よくPHPと連携しよう

FileMaker API for PHPの利用 2:カスタム関数で効率的なPHPベースのカスタムWeb

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/06/20 16:30
目次

関数の使用例

 それではこれらの関数を利用した実際のコーディングの例を見てみましょう。

レコードの検索

 まずはレコードの検索から解説します。

ソース3:レコード検索時「result.php」
//APIの読み込み
include_once('FileMaker.php');
//関数の読み込み ※1
include_once('function.php');

//データベースに接続
$fm = new FileMaker();
$fm->setProperty('database', 'Catalog');
$fm->setProperty('hostspec', 'http://localhost');
$fm->setProperty('username', 'web');
$fm->setProperty('password', 'pass');

$layout = 'web_catalog';

//レイアウトオブジェクトの取得 ※2
$layout_obj=$fm->getLayout($layout);
$fields_obj=$layout_obj->getFields();

//カスタム関数を使って、リクエストデータをフィールドオブジェクトに
//フィルタリングして有効なデータのみ抽出。 ※3
$setData = setFields($fields_obj,$_GET);
$fields_array = $setData['field'];
$search_query = $setData['query'];

//検索オブジェクトの作成
$findCommand =& $fm->newFindCommand($layout);

//レコードの取得範囲の指定。
$findCommand->setRange($skip,$max);
//検索条件のセット ※4
foreach($fields_array as $key => $value){
    $findCommand->addFindCriterion($key,$value);
}
$findCommand->addSortRule('ID',1,FILEMAKER_SORT_ASCEND);
//検索実行
$result = $findCommand->execute();
  1. 作成した関数「function.php」を読み込みます。
  2.  
  3. getLayout関数を使って指定したレイアウトのレイアウトオブジェクトを取得し、そこからさらにgetFields関数を利用して対象レイアウトのフィールドオブジェクトを取得します。
  4.  
  5. 作成した関数setDataに、取得したフィールドオブジェクト$field_objとWebフォームからのデータ$_GETを渡して、フィールドと値の配列、および検索条件のセットを取得します。
  6.  
  7. foreach関数でフィールドと値のセットを展開し、addFindCriterion関数に検索条件をセットしていきます。

 これでPHPのコーディング内には具体的な各フォーム名などを記述することなく、必要なすべての値をセットすることができます。レコード検索時のコーディングをするときは、上のソースをコピペして、レイアウト名やソート条件など最低限なところだけ変更するだけで済みます。とっても楽になりますね。

レコード登録・編集

 上の例では、フォームデータをsetFields関数を使って、FileMakerに送信するもののみに絞り込み、PHPのforeach関数でaddFindCriterion関数にセットしました。レコード登録や編集などは、レコード登録・編集オブジェクト作成時に、同時にフィールド名と値のデータをセットできるので、記述はもっと楽になります。

ソース4:レコード登録時「create.php」
//APIの読み込み
include_once('FileMaker.php');
//関数の読み込み ※1
include_once('function.php');

//データベースに接続
$fm = new FileMaker();
$fm->setProperty('database', 'Catalog');
$fm->setProperty('hostspec', 'http://localhost');
$fm->setProperty('username', 'web');
$fm->setProperty('password', 'pass');

$layout = 'web_catalog';

//レイアウトオブジェクトの取得
$layout_obj=$fm->getLayout($layout);
$fields_obj=$layout_obj->getFields();

//カスタム関数を使って、リクエストデータをフィールドオブジェクトに
//フィルタリングして有効なデータのみ抽出。※1
$setData = setFields($fields_obj,$_GET);
$fields_array = $setData['field'];

//レコード登録オブジェクトを作成。フィールドデータも渡す。※2
$record =& $fm->createRecord($layout,$fields_array);
//登録実行
$result = $record->commit();
  1. 「result.php」と同様に、フォームからのデータをsetFields関数を使ってフィールド名と値のセットにします。
  2.  
  3. createRecord関数を使ってレコード登録オブジェクトを作成するときに、引数にフィールド名と値のセットを渡します。

 記述がさらに簡単になりました。フィールドと値のセットを渡せる関数を利用する場合(注2)はこの方法がとても便利です。

注2
 オブジェクト作成と同時にフィールドと値のセットを渡せる関数は次のとおりです。
処理 関数
レコード登録 createRecord、newAddCommand
レコード編集 newEditCommand
これ以外の関数を(レコード検索など)利用する場合は、上記例のようにforeach関数などで、値のセットをaddFindCriterion関数に流し込むようにします。

まとめ

 いかがでしたか? 前回紹介したコーディングに比べれば、カスタム関数を利用した場合の方がコーディングがとてもすっきりし、しかも汎用性のあるものになったことに気付くと思います。

 今回は、日付データの処理やフォームデータの処理など、よく利用される機能を関数化する方法を紹介しました。毎回同じことを記述して面倒だなと感じるところを関数化することにより、それ以降のコーディングがとても楽になり、しかもバグなどに悩まされることも少なくなります。

 さらに、今回のフォームデータの処理の関数も、引数でフィールドオブジェクトを渡していますから、フィールドオブジェクト内の関数validateを使ってフォームデータの事前検証も行うことができるようにするなど、機能をさらに拡張する方法も考えられます。

 PHPの関数などと組み合わせることにより、面倒なコーディングを減らしていけば、旧来のFileMakerカスタムWebのCDML時代と同じぐらい簡単な記述で、しかも比較にならないぐらい豊かな表現力を、現在のカスタムWebは持っていることを実感できると思います。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • 堀 直樹(ホリ ナオキ)

    大学卒業後入社の企業にて、趣味のFileMaker使いからなりゆきで社内のシステム担当となり社内システムの開発に孤軍奮闘する。その後ソフトハウスに転職してFileMakerによるシステム開発に従事し、現在は株式会社キクミミにて数々の企業のシステムを開発する。PHPによるカスタムWebでのシステム構築...

バックナンバー

連載:FileMaker API for PHPの利用
All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5