FormヘルパーのMagicOption (マジックオプション)

Formヘルパーでは、「フィールド名」,「テーブルカラムのデータ型」もしくはモデルの「バリデーション設定」によりフォーム要素を決定したり、自動で属性を付与する「マジックオプション」と呼ばれるものがあるそうです。
「フィールド名」から
テキストボックスである特定のフィールド名が指定された場合にtype属性が付与されます。これらの属性がつくことでHTML5対応のブラウザバージョンでクライントサイドのバリデーション処理が行われるようになります。
// type="password" // フィールド名が'password’,'passwd'もしくは'psword'のテキストボックス echo $this->Form->input( 'password'); echo $this->Form->input( 'passwd'); echo $this->Form->input( 'psword'); // type="email" // フィールド名が'email’のテキストボックス echo $this->Form->input( 'email'); // type="tel" // フィールド名が'tel’,'telephone'もしくは'phone'のテキストボックス echo $this->Form->input( 'tel'); echo $this->Form->input( 'telephone'); echo $this->Form->input( 'phone');
「Formヘルパーに指定されたoptions」から
Form::inputのオプションを指定する第二引数に特定のoptionsが指定された場合は、強制的に対応するtype属性が指定されます。'options'が指定された場合は'type' => 'select' (参考)が、'cheched'が指定された場合は、'type' => 'checkbox' (参考)が設定されます。
「テーブルカラムのデータ型」から
カラムのデータ型によりフォームの要素を決定してくれます。
(この例では、認識しやすいようにフォームのフィールド名を「カラム型」名と一致させています。特別このフィールド名でないといけないというわけではありません。)
// type="text" echo $this->Form->input( 'char'); // テキストボックス echo $this->Form->input( 'varchar'); // テキストボックス // textarea echo $this->Form->input( 'text'); // テキストエリア // type="checkbox" echo $this->Form->input( 'boolean'); // チェックボックス echo $this->Form->input( 'tinyint'); // チェックボックス echo $this->Form->input( 'date'); // month-day-year echo $this->Form->input( 'datetime'); // month-day-year-hour-min-meridian echo $this->Form->input( 'timestamp'); // month-day-year-hour-min-meridian echo $this->Form->input( 'time'); // hour-min-meridian // type="file" echo $this->Form->input( 'binary'); // ファイルアップロードフォーム 2.5~ // type="hidden" echo $this->Form->input( 'id'); // プライマリキーのカラム 例:id // type="number" 数値入力ボックス echo $this->Form->input( 'integer'); // echo $this->Form->input( 'decimal'); // 小数点最下位ごとにステップ echo $this->Form->input( 'float'); // step="any"
モデルの「バリデーション設定」から
各ルールでは、'allowEmpty'を指定しない場合、デフォルトでは「'allowEmpty' => false」で必須となりrequired属性(required="required")が付与されます。
createやendに以下のように指定すると、この必須属性が自動で追加されるのを無効にすることができます。
echo $this->Form->create( 'Model', array( 'novalidate' => true)); もしくは echo $this->Form->end( 'save', array( 'formnovalidate' => true));
関連記事
-
-
Formヘルパーのinputタグのdiv/labelなどの設定
Formヘルパーのinputではデフォルトでは以下のようにdivで囲われて、labelが付与されて出力されます。 CSSのフレームワークなどであらかじめ決まったスタイルがある場合に便利に作られていま
-
-
Blowfishを使用してハッシュ化する
使用方法 Blowfishを採用してハッシュ化を行う場合、Securityクラスのhashメソッドを呼び出します。第2引数に'blowfish'を指定し、第3引数を指定しないもしくはfalseにしま
-
-
CakePHP 2.x インストール
現在まで私が商用・非商用にリリースしているCakePHPアプリケーションは全て1.3.xベースで作成しています。 まだまだロードマップ的には大丈夫そうですが、お客さん向けに納品しているアプリケーショ
-
-
ログインに追加の条件を付与する「scope」
ユーザ登録では、仮登録処理(status=1)から送付したメール内のリンクをクリックしてもらい本登録(status=0)を行ってもらう実装をしました。仮登録の状態ではログインできないように実装するには
-
-
hasOne アソシエーション
hasOneアソシエーションはテーブル間で1つのレコードに対して他のテーブルに紐付くレコードが1つの場合にjoinする場合に使用します。 CakePHPのドキュメントにならってUserモデルとP
-
-
複数ファイルアップロードフォーム
CakePHP 2.0からはHTML5が標準でサポートとなり、複数ファイルアップロードのためのフォーム記述が容易になりました。 View (ビュー) 配列 Array (
-
-
バリデーションエラーメッセージの取得
CakePHP 2.xになってバリデーションエラー時に返却されるメッセージのデータ形式が変更になったようです。1.3系では、ひとつのフィールドに対して返却されるメッセージは一つのルールのみですが、2.
-
-
コントローラ内でバリデーション処理を呼び出す
CakePHPでは、saveメソッドの際にバリデーション処理も自動で行われますが、save処理と切り離してバリデーションを行うこともできます。このときは、save時と若干異なる処理体系になります。
-
-
ログローテーション
CakePHP 2.xではbootstrap.php内にあらかじめアプリケーションログの設定が書かれています。2.xで日付ごとにログファイルが切り替わるよう設定してみました。 日ごとにログを切り替え
-
-
バリデーション前後に処理を追加できる「beforeValidate」「afterValidate」
CakePHPでは、「beforeValidate」「afterValidate」というバリデーション処理の前後で追加の処理を実装できるコールバック関数が用意されています。 beforeVali