前回に引き続き、フォームの作成に関する記事3ということで
続きを書いていきます。
前回までで、個別にフォームを作成する場合と、
バリデーションについて書いていきました。
実は、フォームの生成とバリデーションを一緒にできる方法があるので、
それについて書いていきたいと思います。
INDEX
オブジェクト指向風のフォーム作成方法
さっきも書いたのですけど、Fieldsetはフォームをオブジェクト指向風に作成することが出来ます。
例えば、こういう風に記述した場合には
こんな感じで書いて
Viewsにset_safeで設定した変数を呼び出すと
フォームの属性をナントカしたい場合は場合はこうやります。
inputの作成方法はaddメソッド
fieldsetクラスに書いてあるメソッドです。
フォームに対して、属性やバリデーションの設定をすることができます!
作成したinputの編集をするにはfieldメソッド
さっきの工程を行う事により、呼び出したオブジェクトに、
inputタグを登録というか追加することができます。
でも、あ、やっぱし編集したいとかあると思います。
そんな時にfieldが役に立ちます。
これでtextboxで作った奴が、checkboxに変更されました!
選択肢が複数ある場合選択肢を設定できる
コンボボックスやチェックボックスやラジオボタン作る場合には
optionsを設定することで、選択肢を指定できます。
optionsの値に入れた配列が選択肢として出力されます。
後でoptions追加するならこうなります。
バリデーションルールを追加する
バリデーションルールを追加するにはadd_ruleメソッドを使います。
これも同じ感じで、$obj->add_ruleって感じで使っていきます。
こんな感じになります。
モデルのフィールドをinputタグとして使う場合
モデルをフォームにそっくりそのまま作り変えることもできます。
Fieldset::forgeする際にadd_modelメソッドを呼び出す事で可能になります。
この後でbuildすれば、モデルの内容がフォームとして出力されます。
モデルにフォームのタイプを設定する
モデルの配列の中に設定します。コードにコメント入れる形で見ていきます。
こんな感じで、作成されているモデルや、作成したモデルに追加していく形になります。
選択肢がある場合だとこういう風になります。
typeをchekboxやradioにすると、そのようにフォームが変わります。
optionsもこんな感じで設定することができます。
textareaはこう設定します。
バリデーションの設定
バリデーションもモデルに設定することができます。
validationの中に設定したバリデーションを入れると、
そのバリデーションが実行されます。ちょっとややこしい奴もできます。
こんな感じで正規表現もできたりします。
バリデーションの一覧は公式に詳しく載っていたりします。
ルール表を参考にしてください。
add_modelする際に編集したいものがある時
・fieldメソッドを使って、フォームの追加したり削除する
・fieldメソッドを使ってバリデーションを追加したり削除したりする
こんな感じでmodelからフォームを作成した場合には
$obj->fieldとか$obj->addとかが便利になります。
動いてるコード
自分が書いて動いてるメソッドを取り出してみます。
ポイント
・バリデーションはrunメソッドを呼び出して真偽判定する
・repopulateメソッドで、ユーザーが入力した内容を覚えさせておく(入力しなおしの際のストレス軽減)
・show_errorsメソッドを使う事で、エラーを記憶させる事ができる
とまぁ、気がついたら長くなってしまいましたが、
今回もお付き合い頂いて下さった方、どうもありがとうございました。