FuelPHPでフォーム作成2(Fieldset) - Validation
Fieldsetでのバリデーション
前回作成したフォームに対し、入力チェックを付けてみる。
基本的には、addで作成したフォームに対しadd_ruleで、入力チェックルールを追加していく形。
例
$form->add('name', 'お名前', array('maxlength' => 8)); ->add_rule('required') ->add_rule('max_length', 8);
Validationを見ると、以下のルール以外にも、PHPの関数やコールバックが使える模様
required match_value match_pattern match_field min_length max_length exact_length valid_email valid_emails valid_url valid_ip numeric_min numeric_max valid_string
上記を踏まえ、前回作成したフォームに入力チェックを付けてみた。
Controller
<?php class Controller_Myform extends Controller { public function action_index() { $view = View::forge('myform/index'); $form = Fieldset::forge(); // input $form->add('name', 'お名前', array('maxlength' => 8)) ->add_rule('required') ->add_rule('valid_string', array('alpha', 'numeric', 'utf8')); // password $form->add('password', 'パスワード', array('type' => 'password')) ->add_rule('required') ->add_rule('valid_string', array('alpha', 'numeric', 'utf8')); // selectbox $select_list = array( 1 => 'タイプ1', 2 => 'タイプ2' ); $form->add('type', 'タイプ', array('type' => 'select', 'options' => $select_list)) ->add_rule('required') ->add_rule('array_key_exists', $select_list); // radio $radio_list = array( 1 => '男性', 2 => '女性' ); $form->add('gender', '性別', array('type' => 'radio', 'options' => $radio_list)) ->add_rule('required') ->add_rule('array_key_exists', $radio_list); // checkbox $check_list = array( 1 => '映画鑑賞', 2 => '散歩', 3 => 'その他' ); $form->add('hobby', '趣味', array('type' => 'checkbox', 'options' => $check_list)); $form->add('submit', '', array('type' => 'submit', 'value' => '送信')); // 値保持 $form->repopulate(); if ($form->validation()->run()) { // バリデーションOK時の処理 } else { // エラー時 $view->set('errors', $form->validation()->error()); } $view->set_safe('form', $form->build(Uri::create('myform'))); return $view; } }
selectboxやradioの存在確認は、array_key_existsを使用。
checkboxの入力チェックが上手くいかない
一点、checkboxの入力チェックがarray_key_existsだとうまくいかない。
checkboxのバリデーションはこちら。