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ヘルパー:/lib/Cake/View/Helper/FormHelper.php
Views > Helpers > FormHelper > input
デモ
  • このエントリーをはてなブックマークに追加

関連記事

日付・時間のバリデーション

日付や時刻に関するバリデーションは以下のルールがビルトインされています。 date 日付 time 時刻 datetime 日時 (m:「月」を数字表記 / M:「月」を英語表記)

テーブルからランダムにデータを取り出す(find)

CakePHPでテーブルから特定件数のレコードをランダムに取得するには以下のように指定するとできます。 $this->data = $this->Bulkdata->find( 'all',

DebugKitを導入

定番のブログチュートリアルをこなして、定番のDebugKitを導入してみました。 2.3からはCakePHPインストール直後に以下のように導入を推奨するような警告メッセージが表示されるようになりまし

多言語サイト向けに翻訳ファイルを使って翻訳を行う

CakePHPには、翻訳をビヘイビアを使用する方法と翻訳ファイルを使用する方法の2つがあるそうです。(他にもあるのかな?) 今回は、翻訳ファイルを使用して言語の切り替えを行い、その言語設定をCook

SQLクエリーをログに出力する

SQLのクエリーをデバッグするには、Debug Kitを使用すればできますが、デバッグログと一緒に出したいのでやり方を調査してみました。 別々のログやビューでみるのもいいですが、秒単位で実行される処

バリデーションエラーメッセージの取得

CakePHP 2.xになってバリデーションエラー時に返却されるメッセージのデータ形式が変更になったようです。1.3系では、ひとつのフィールドに対して返却されるメッセージは一つのルールのみですが、2.

Markdown Plugin

「Markdown CakePHP Plugin」は、MarkDown書式をレンダリングしてくれるビューヘルパーです。MarkDownについて勉強しているうちに出会ったので試し打ちです。 ダウンロー

hasOne アソシエーション

hasOneアソシエーションはテーブル間で1つのレコードに対して他のテーブルに紐付くレコードが1つの場合にjoinする場合に使用します。 CakePHPのドキュメントにならってUserモデルとP

数値系バリデーション

CakePHP 2になっていくつか数値用バリデーションルールが追加されています。 数値用 (コア)バリデーション decimal - 十進数であること numeric - 数値であること

バリデーション前後に処理を追加できる「beforeValidate」「afterValidate」

CakePHPでは、「beforeValidate」「afterValidate」というバリデーション処理の前後で追加の処理を実装できるコールバック関数が用意されています。 beforeVali

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

PAGE TOP ↑