ONDrecords【WEBまわりの事をやっております】WEBデザイン・通販システム・予約システムなどが出来ます!

【Fuel】フォームの使い方について

fuelのフォームは、Formクラスか、Fieldsetクラスを使う。
Formクラスは単発使いに、Fieldsetクラスは使い回しするのに便利。
バリデーションは、Validationクラスを使うか、Fieldsetクラスのadd_rule関数、
または、Ormモデルの場合、
モデルの$_properties()に書き込む。

Formクラスの例

Form::open(array('action' => 'URL', 'method' => 'post'));

Form::input('name属性','初期値',
array('size' => 20, 'class' => 'df-style'));

Form::select('name属性',null,
array('1' => 'value1', '2' => 'value2'));

Form::radio('name属性','値',
array('class' => 'df-style'));

Form::checkbox('name属性','値',
array('class' => 'df-style'));

Form::textarea('name属性','初期値',
array('rows' => 5, 'cols' => 30));

Form::label('任意の名前','name属性');
Form::password();
Form::hidden();
Form::file();
Form::button('name属性','初期値',
array('size' => 20, 'class' => 'df-style'));

Form::submit();
Form::reset();
Form:close();

ビューでechoして使う

ラジオボタンのlabelは注意が必要。
第3引数に、id「form_labelの第2引数」を設定する。

Form::label('任意の名前','gender_male');
Form::radio('gender','男',array('id' => 'form_gender_male'));

Validationクラスの例

コントローラーで、Validation::forge();した後、add_field()で追加し、
if($val->run()で){OKの場合}else{NGの場合}でチェックする。

$val=Validation::forge();
$val->add_field('name','お名前','required');
$val->add_field('email','メール','required|valid_email');

errorは$val->errror()で配列で取得できる。

もう一つのやり方

add()関数で、ターゲットを設定し、add_rule()関数で
バリデーションを追加していく。

$val->add('password','パスワード')
->add_rule('required')
->add_rule('min_length',8)
->add_rule('max_length',12);

Fieldsetクラスの例

コントローラーで、Fieldset::forge(‘任意の名前’);した後、add()で項目を追加し、field()で取得し、set_label(‘name属性’)や、set_attribute(‘size’,10)、set_type(‘select’)、set_option(array(0 => ‘value0′))や、add_rule()などを追加していく。
htmlの書き出しは、build(‘actionのパス’)関数を使う。

バリデーションの場合は、
if(Fieldsetインスタンス->validation()->run()) {OKの場合}else{NGの場合}
でチェックする。

$user_form = Fieldset::forge('user_form');

$user_form->add('name', 'お名前', 
array('type'=>'text', 'size'=>40, 'value'=>'名前のご入力'));

$user_form->add('sex', '性別', 
array('type'=>'radio', 'options'=>
array(1=>'男性', 2=>'女性'), 'value'=>1));

$user_form->add('submit', '', 
array('type'=>'submit', 'value'=>'送信'));

$view = View::forge('form');
$view->set('form',$user_form->build('member/send'),false);
return Response::forge($view);

build()で生成されるhtmlは、Core/Config/form.phpに基づき書き出される。
カスタマイズする場合は、APPPATH/Config/ にコピーし、中身を編集する。

コントローラーで、ビューにFieldsetクラスをセットして渡す。
その際、set()関数の第3引数をfalseとする。htmlタグをエスケープさせるためである。

add()関数で追加した項目を、field()関数で取得し、
add_rule()関数でバリデーションを追加できる。
form項目のtypeをfalseにすると、
フォームには表示しない。

$user_form->field('name')
->add_rule('required')
->add_rule('valid_string',
array('alpha','numeric','dashes','utf8'))
->add_rule('match_field','password1');

Orm\Modelクラスの例

class Model_Test extends \Orm\Model内に記載される、
protected static $_properties = array();
で、バリデーションや、フォームの種類などを設定できる。

protected static $_properties = array(
'name' => array(
 'data_type' => 'varchar',
 'label' => '氏名',
 'validation' => array('required'),
 'form' => array('type' => 'text'),
 'default' => '名前をご入力',
),

'sex' => array(
 'data_type' => 'int',
 'label' => '性別',
 'validation' => array('required',
 'min_length'=> array(8),
 'max_length'=> array(12)),
 'form' => array('type' => 'radio',
 'options' => array(1 => '男',2 => '女')),
 'default' => 1,
),

'created_at' => array(
 'form' => array('type' => false)
),
'updated_at' => array(
 'form' => array('type' => false)
)
);

コントローラーで、モデルのインスタンを取得し、Fieldsetクラスのadd_model()関数に渡すと、上記のバリデーションが対応する。
モデルに初期値が設定されている場合は、さらにpopulate()関数を使うとそれも読み込む。
モデルにない項目も追加したい場合は、add_before()、または、add_after()を使う。

public function action_index(){
$user = Model_User::forge();
$user_form = Fieldset::forge('user_form');
$user_form->add_model($user)->populate($user);
$user_form->add_after('password2', 'パスワード(確認用)', 
array('type'=>'password'),array('required'),'password');

$view = View::forge('form');
$view->set('form', $user_form->built('form/check'),false);
return Response::forge($view);
}

Copyright © 2013 ONDrecords. All rights reserved.