DEV

fuelphp1.8 - Formとバリデーション

fieldsetを使うと、入力した内容を保持できるし、バリデーションチェックも簡単に行える。エラーも自動で表示できる。core/config/form.phpにformを表示する際のHTMLの設定が書いてあるので、これをシンプルにすることで、多様なデザインにもデザイナがviewの設定のみで大体対応できるようになるかなと思った。

form.phpの設定項目

引用:FuelPHPのFieldsetクラスをまとめてみた。1

項目名説明
form_methodformのmethod属性の値
form_templateformを作る際のテンプレートです。{open}がformの開始、{fields}がフィールド部分、{close}がformの終了です。こちらはFormクラスで使用されます。
fieldset_template↑のfieldset版。
field_templatefieldのテンプレート。そのままですね。
multi_field_templatefieldが複数だった時のテンプレート。{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);
}