CakePHP の理解を深めるためのメソッド
オープンソースのプログラムを利用すると、ドキュメントに無い仕様を理解するためにソースコードの読み解きが必要になる可能性があります。それは CakePHP も例外ではありません。幸いなことに CakePHP は PHP で書かれていますし、覚えておくと便利なコードは、まだそれほど多くありません。
コントローラ - Controller
- Controller::cleanUpFields()
- HTML ヘルパーで書かれた年月日や時刻のデータを結合して文字列にします。たとえば、入力画面を作る際、テーブル上では Date 型と定義されているフィールドの HTML を HTML ヘルパーを用いて書くと、年と月と日とでそれぞれ3つの select 要素が出力されます。
<!-- Date 型のフィールド some_date を HTML ヘルパーで出力したイメージ --> <select name="some_date_year"> … <option>1980</option> <option>1981</option> <option>1982</option> … </select>年 <select name="some_date_month"> … <option>3</option> <option>4</option> <option>5</option> … </select>月 <select name="some_date_day"> … <option>13</option> <option>14</option> <option>15</option> … </select>日
各 select 要素の name 属性が some_date をベースとして some_date_year, some_date_month, some_date_day と修飾されている点に注目してください。Controller::cleanUpFields() は、このようなデータがコントローラ( Controller::data )に入っているとき、年月日を結合して 1981-4-14 のようにデータベースが理解しやすい値に変換したうえ、名前を some_date として Controller::data にデータを登録します。
モデル - Model
モデルには値の検証(バリデーション)に関する、名前がよく似ているメソッドがいくつかあります。 Model::validates(), Model::invalidFields(), Model::invalidate() の3つで、このメソッドを理解することで、モデルへの理解がいっそう深まります。
- Model::invalidFields()
- Model::validate に基づき、データ( Model::data )を検証して、エラーが発生した
件数フィード名のリストを返します。名前からは想像しづらいのですが、このメソッドが検証(バリデーション)の中心で、検証のアルゴリズムはここに書かれています。 - Model::validates()
- Model::invalidFields() に基づき、すべてのデータが検証にパスしたかの真偽値を返します。このメソッドは Model::save() の中で自動的に呼ばれ、すべてのデータが検証にパスできなかった場合は Model::save() を中止します(強制的に save() する場合は引数でその旨を指定する)。
- Model::invalidate()
- モデルの中の指定したフィールドに、検証失敗のフラグを立てます。 Model::invalidFields() が、検証(バリデーション)にパスできなかったフィールドを記憶するためのメソッドですが、 Model::beforeValidate() の中で使用することで、独自の検証(バリデーション)の後に CakePHP の検証(バリデーション)を連続で実行することができます( Model::beforeValidate() は独自の検証ルールを記述するための場所ですが、通常、このメソッドを使用して検証を失敗させると CakePHP の検証が実行されません)。
HTML ヘルパー - HtmlHelper
- HtmlHelper::setFormTag()
- たとえば “SomeModel/SomeField” のように、”モデル名/フィールド名”という形式になっている文字列から、モデル名とフィールド名をパースして HtmlHelper のインスタンスに格納します。格納されたモデル名とフィールド名は HtmlHelper の各所で使われますので、このメソッドは多用されています。
- HtmlHelper::selectTag()
- select タグ( option タグを含む)を出力します。公式マニュアルに載っていないのは、今後 HtmlHelper で select タグを出力するという常識が無くなる可能性があるためかと思われます( 2007年6月5日現在、 1.2.x.x には HtmlHelper::selectTag() はありません)。ちなみにインタフェースは次のようになります。
HtmlHelper::selectTag(
$fieldName,
$optionElements,
$selected = null,
$selectAttr = array(),
$optionAttr = null,
$showEmpty = true,
$return = false
)パラメータ
- string $fieldName
- タグの name 属性
- array $optionElements
- option タグの内容( ’value’ => ’text’ のペア配列)
- mixed $selected
- 初期選択の option の value
- array $selectAttr
- select タグの属性( style 属性など)
- array $optionAttr
- 各 option タグの属性( style 属性など)
- boolean $show_empty
- 先頭に空の option タグを追加するか?
- boolean $return
- 結果を出力するか値を返すのか?
返値
select タグの HTML
グローバル関数 - basics.php
loadModel() という関数はモデルを任意のタイミングで読み込むことができます。基本的に利用するケースはありませんが、弊社では CakePHP の 1.1.x.x で 1.2.x.x のビヘイビアをエミュレートする場合などに使用しています。
« 「CakePHP の暗黙なサニタイズ」へ | トップへ | 上の階層へ | 「scaffolding と bake.php から学ぶ CakePHP」へ »