10月 292012
 

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クラスでフォームを作成することはまだ私は慣れてません。慣れが必要です。

Pocket

 Posted by at 10:07 PM

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


*