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));
関連記事
-
アップロードファイルのバリデーションルール
CakePHP 2.2や2.3になってファイルアップロードに対するルールがコアバリデーションに追加されているようで、まとめてみました。 コアバリデーション 関連しそうなルールは以下の4つの
-
Blowfishを使用してハッシュ化する
使用方法 Blowfishを採用してハッシュ化を行う場合、Securityクラスのhashメソッドを呼び出します。第2引数に'blowfish'を指定し、第3引数を指定しないもしくはfalseにしま
-
ネストしたリストを出力「nestedList」
DBやJSONからデータを取得して、そのデータをもとにメニュー表示などネストしたリストを出力させたい場合に「nestedList」が便利です。 ヘルパーに渡すデータは連想配列である必要があります。(
-
バリデーションエラーメッセージの取得
CakePHP 2.xになってバリデーションエラー時に返却されるメッセージのデータ形式が変更になったようです。1.3系では、ひとつのフィールドに対して返却されるメッセージは一つのルールのみですが、2.
-
CSS/JSをひとまとめにして軽量化するプラグイン「Minify plugin for CakePHP」
「Minify plugin for CakePHP」は、インクルードするCSSもしくはJSファイルをひとまとめにしてキャッシュ化してくれるプラグインです。 導入 ダウンロード・解凍し
-
ログローテーション
CakePHP 2.xではbootstrap.php内にあらかじめアプリケーションログの設定が書かれています。2.xで日付ごとにログファイルが切り替わるよう設定してみました。 日ごとにログを切り替え
-
複数ファイルアップロードフォーム
CakePHP 2.0からはHTML5が標準でサポートとなり、複数ファイルアップロードのためのフォーム記述が容易になりました。 View (ビュー) 配列 Array (
-
ログインに追加の条件を付与する「scope」
ユーザ登録では、仮登録処理(status=1)から送付したメール内のリンクをクリックしてもらい本登録(status=0)を行ってもらう実装をしました。仮登録の状態ではログインできないように実装するには
-
checkボックスを実装
selectボックスに引き続いてcheckボックスの実装方法をおさらいしてみます。 コードは、CakePHP 2と1.3両方で実装可能です。デモ モデルは、こちらも以下 CREATE TA
-
Cookieログイン
今回は、ログイン画面でよくみかけるクッキーログインの機能を使ってみます。 CakePHPには、Cookieコンポーネントがあります。(PHPのsetcookieメソッドのラッパー)メソッドはwr