Fieldsetクラスをまとめてみた。2
こんにちは。ファガイです。本日は、前々回で言っていたFieldsetクラスの残りを書きます。OrmモデルとFieldsetクラスを使ったフォーム作成方法です。
基本(Model部)
例えば、articleモデル。Fieldsetクラスのフォーム設定をOrmモデル内で設定するには、$_properties変数の内容を変更します。(リレーションは除いています。)
before
protected static $_properties = array(
'id',
'title',
'body',
'user_id',
'created_at',
'updated_at',
);
after
protected static $_properties = array(
'id' => array(
'form' => array('type' => false),
),
'title' => array(
'data_type' => 'varchar',
'label' => 'タイトル',
'validation' => array('required'),
'form' => array('type' => 'text'),
),
'body' => array(
'data_type' => 'text',
'label' => '本文',
'validation' => array('required'),
'form' => array('type' => 'textarea'),
),
'user_id' => array(
'data_type' => 'int',
'validation' => array('required', 'valid_string' => array(array('numeric'))),
'form' => array('type' => 'hidden'),
),
'created_at' => array(
'skip' => true,
),
'updated_at' => array(
'skip' => true,
)
);
解説
こちらはFieldsetクラスでモデルを使用する際に必要となる設定です。これを利用した部分は後で紹介します。
主に、key => array()の形で記述していきます。項目を表にまとめました。
項目名 | 説明 |
---|---|
data_type | カラム自身のデータタイプ。varcharやint等。 |
label | ラベル名。 |
validation | バリデーションの設定をします。配列に指定します。 |
form | 前回の$user_form->add()の第3引数の部分にあたる。 |
default | デフォルトのvalue値。populateしないと値は入らない |
他にも指定できる値があるのかも知れないですが、分からなかったです。誰か教えてください・・・。
注意点として、validationの対応する値にはarrayでの指定が必要です。そのため、valid_stringはarray(array())となるので注意。
また、update_atなどに’type’=>falseを指定していますが、これはフォームに必要な情報ではない場合に記述します。つまりFieldsetクラスに追加されません。
2016-03-10修正。updated_atなど、フォームに必要な情報ではない場合は、'skip' => true
を指定します。これでFieldsetクラスには追加されません。
実際にFormを作成する
ソース
public function action_index() {
$article = Model_Article::forge();
$add_form = Fieldset::forge('add_form');
$add_form->add_model($article)->populate($artilce);
$view = View::forge('article/add');
$view->set('form', $add_form->build(), false);
return Response::forge($view);
}
このような感じでormを利用してformを作成できます。
解説
add_model()メソッド
add_model() 第1引数:Orm/Modelクラス名またはOrm/Modelオブジェクト 第2、第3引数もあるが省略。
この設定を行うことで、Fieldsetクラスにformが設定されます。
populate()メソッド
populate()メソッド 第1引数:populateするオブジェクト
populate()メソッドはformに初期値を設定することが出来ます。
repopulate()メソッド
こちらのメソッドは、例えばvalidationで引っかかってしまった時等に同じ値を何回も記述しなくても良いようにするためのメソッドです。
つまり、postやgetされた値を再設定してくれるメソッドです。
こんなところでしょうか。Ormモデルを利用してFieldsetクラスでフォームを作成することはまだ私は慣れてません。慣れが必要です。
コメント