FuelPHPでフォーム作成 - Formクラス
Fieldsetは、デザイン的な部分で融通が利かない可能性があるので、Formクラスでの実装を試してみる。
以下のサイトを参考にさせて頂いた。
Controller
ControllerでFieldsetの場合と違うのは以下の点。
- 『Fieldset::forge()』 が 『Validation::forge()』 に
- 『type』や『options』の設定が不要
<?php class Controller_Myform extends Controller { public function action_index() { $view = View::forge('myform/index'); $validation = Validation::forge(); // input $validation->add('name', 'お名前') ->add_rule('required') ->add_rule('valid_string', array('alpha', 'numeric', 'utf8')); // password $validation->add('password', 'パスワード') ->add_rule('required') ->add_rule('valid_string', array('alpha', 'numeric', 'utf8')); // selectbox $select_list = array( 1 => 'タイプ1', 2 => 'タイプ2' ); $view->set('select_list', $select_list); $validation->add('type', 'タイプ') ->add_rule('required') ->add_rule('array_key_exists', $select_list); // radio $radio_list = array( 1 => '男性', 2 => '女性' ); $view->set('radio_list', $radio_list); $validation->add('gender', '性別') ->add_rule('required') ->add_rule('array_key_exists', $radio_list); // checkbox $check_list = array( 1 => '映画鑑賞', 2 => '散歩', 3 => 'その他' ); $view->set('check_list', $check_list); $validation->add_callable(new MyValidation()); $validation->add('hobby', '趣味') ->add_rule('checkbox_val', $check_list) ->add_rule('checkbox_require', 2); if (Input::post()) { if ($validation->run() && Security::check_token()) { // バリデーションOK時の処理 } else { $view->set('errors', $validation->error()); } } return $view; } }
View
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <?php if (isset($errors)): ?> <ul> <?php foreach ($errors as $error): ?> <li><?php echo $error ?></li> <?php endforeach ?> </ul> <?php endif ?> <?php echo Form::open() ?> <?php echo Form::hidden(Config::get('security.csrf_token_key'), Security::fetch_token()) ?> お名前:<?php echo Form::input('name', Input::post('name'), array('required' => 'required')) ?><br /> パスワード:<?php echo Form::input('password', Input::post('password'), array('type' => 'password', 'required' => 'required')) ?><br /> タイプ:<?php echo Form::select('type', Input::post('type'), $select_list) ?><br /> 性別: <?php foreach ($radio_list as $key => $val): ?> <?php echo Form::radio('gender', $key, Input::post('gender') == $key) ?> <?php echo Form::label($val, 'gender') ?> <?php endforeach ?> <br /> 趣味: <?php foreach ($check_list as $key => $val): ?> <?php echo Form::checkbox('hobby[]', $key, Input::post('hobby') && in_array($key, Input::post('hobby'))) ?> <?php echo Form::label($val, 'hobby') ?><br /> <?php endforeach ?> <?php echo Form::submit('submit_btn', '送信') ?> <?php echo Form::close() ?> </body> </html>
Form関数は主なものを以下に抜粋
Form::input('名前', '値', '属性'); Form::select('名前', '選択値', 'options配列'); Form::radio('名前', '値', 'checkedフラグ'); Form::check('名前', '値', 'checkedフラグ');
Form Classにて詳細とサンプルが確認可能です。