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 インストール時エラーの対処
CakePHPインストール時に出くわすであろうエラーの原因と対処方法についてまとめてみました。前提として、WebサーバはApache、データベースはMySQLとしています。 Timezone未設
-
-
checkボックスを実装
selectボックスに引き続いてcheckボックスの実装方法をおさらいしてみます。 コードは、CakePHP 2と1.3両方で実装可能です。デモ モデルは、こちらも以下 CREATE TA
-
-
ログインに追加の条件を付与する「scope」
ユーザ登録では、仮登録処理(status=1)から送付したメール内のリンクをクリックしてもらい本登録(status=0)を行ってもらう実装をしました。仮登録の状態ではログインできないように実装するには
-
-
独自のバリデーションルールを作成
CakePHPで組み込みバリデーションルールをつくる方法は、正規表現を定義する方法と独自メソッドを定義する方法の2つがあるようです。 参考 Custom Validation Rules 正規
-
-
Jsヘルパーを使用してAjax更新
更新処理でページ遷移を伴う場合、ページ全体をレスポンスするのに対して、Ajax処理ではページの一部のレスポンスが可能となるためサーバからの通信量を抑えることが可能となります。デモ head
-
-
radioボタンを実装
Radioボタンの実装は、セレクトボックスとほぼ同じです。 個人的にはラジオボタンをすすんで使用することは少ないのですが、2択くらいの選択肢であれば非常に便利ですよね。 今回は、その実装方法 デモ
-
-
コントローラ内でバリデーション処理を呼び出す
CakePHPでは、saveメソッドの際にバリデーション処理も自動で行われますが、save処理と切り離してバリデーションを行うこともできます。このときは、save時と若干異なる処理体系になります。
-
-
ネストしたリストを出力「nestedList」
DBやJSONからデータを取得して、そのデータをもとにメニュー表示などネストしたリストを出力させたい場合に「nestedList」が便利です。 ヘルパーに渡すデータは連想配列である必要があります。(
-
-
バリデーション前後に処理を追加できる「beforeValidate」「afterValidate」
CakePHPでは、「beforeValidate」「afterValidate」というバリデーション処理の前後で追加の処理を実装できるコールバック関数が用意されています。 beforeVali
-
-
CakeEmailでメール送信(@gmail)
CakePHP 2になって追加されたクラスCakeEmailがシンプルに使えます。これを使用してメール送信を行う処理を実装してみました。 CakeEmailクラスの読み込み /app/Config


