Pocket
LINEで送る

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);
}
Pocket
LINEで送る


コメントください

関連記事

プログラミング

Go言語によるビットコインのフルノード実装btcdを調べる(2)

btcdを実行した際のプログラムの流れを最初から確認してみます。 se 続きを読む …

プログラミング

Go – leveldb

Goで使えるLevelDB。 syndtr/goleveldb ドキュ 続きを読む …

%d人のブロガーが「いいね」をつけました。