fieldsetを使うと、入力した内容を保持できるし、バリデーションチェックも簡単に行える。エラーも自動で表示できる。core/config/form.phpにformを表示する際のHTMLの設定が書いてあるので、これをシンプルにすることで、多様なデザインにもデザイナがviewの設定のみで大体対応できるようになるかなと思った。
form.phpの設定項目
引用:FuelPHPのFieldsetクラスをまとめてみた。1
項目名 | 説明 |
---|---|
form_method | formのmethod属性の値 |
form_template | formを作る際のテンプレートです。{open}がformの開始、{fields}がフィールド部分、{close}がformの終了です。こちらはFormクラスで使用されます。 |
fieldset_template | ↑のfieldset版。 |
field_template | fieldのテンプレート。そのままですね。 |
multi_field_template | fieldが複数だった時のテンプレート。{fields}から{fields}までが項目のループ部分。セレクトボックスはどうやってるのかは不明 |
error_template | エラーのテンプレート。$user_form->validation()->error()メソッドで使われている模様。 |
required_mark | {required}に対応する値を指定。 |
inline_errors | エラーを表示するかどうか。 |
error_class | エラー表示に使うクラス名。デフォルトではtdに指定しているのでこのクラスに対してエラーだった時のbackground-color等を指定することになる。 |
バリデーションエラーメッセージの日本語化
・core/lang/en/validation.phpを、app/lang/ja/にコピーして編集する。 ・app/config/config.phpの「language」を「ja」に設定する。
モデルの例
/** * フィールドセット */ public static function fieldset() { $fset = Fieldset::forge(); $fset->add('name', '名前') ->add_rule('required') ->add_rule('max_length', 30); $fset->add('order_no', '並び順') ->add_rule('required') ->add_rule('numeric_between', 1,100); return $fset; }
app/config/form.phpのfield_templateの例
'field_template' => "<div class='form-group'>{label}{required}{field}<p class='err_msg'>{error_msg}</p></div>",
コントローラの例
/** * 管理 - 大カテゴリー登録 */ public function action_add_big() { //フィールドセットの取得 $fset = Model_Category::fieldset(); if (Input::post()) { // バリデーションチェック $val = $fset->validation(); if ($val->run()) { //カテゴリ登録 if(Model_Category::add_big(Input::post('name'), Input::post('order_no'))) { Session::set_flash('msg', '大カテゴリーを登録しました。'); return Response::redirect('admin/categories/'); } } $fset->repopulate(); Session::set_flash('msg', '大カテゴリーが登録できませんでした。恐れ入りますが、再度お試しください。'); } //set view $data['menu_tab'] = View::forge('elements/admin/categories/menu_tab', array('active' => 'big')); $this->template->content = View::forge('admin/categories/add_big', $data); $this->template->content->set_safe('fset', $fset); }