まず、バリデーションについてですが自前で実装しました。自前といってもいいサンプルがあったんでそれを真似してます。
FuelPHPでcheckboxのバリデーション
http://btt.hatenablog.com/entry/2012/06/14/143043
次に値の受け渡しです。
普通の input とかの場合だと
<?php echo Form::input('name', Input::post('name', isset($user) ? $user->name : '')); ?>
バリデーションでエラーを戻した場合は Input::post で入力された値を取得、post されていない場合はモデルから取得した値、何もなかったら空白。
チェックボックスの場合、リストを配列から回しながら表示していくと思います。
for ($groups as $group) { echo Form::checkbox('groups[]', $group->id, array('id' => 'group_'.$group->id)); echo Form::label($group->name, 'group_'.$group->id); }
ただ表示するだけだとこんなかんじになるのかなと・・・
これに input と同じような仕組みを付け加えると
for ($groups as $group) { echo Form::checkbox('groups[]', $group->id, in_array($group->id, Input::post('groups', array())) ? array('id' => 'group_'.$group->id, 'checked' => 'checked') : array_key_exists($group->id, isset($user) ? $user->groups : array()) ? array('id' => 'group_'.$group->id, 'checked' => 'checked') : array('id' => 'group_'.$group->id) ); echo Form::label($group->name, 'group_'.$group->id); }
なんか大変なことになってしまった・・・
checkbox を Input::post で受け渡しすると checkbox の value が配列の値として入ってくるけどモデルから取得した値は、キーになってる。
(中身を展開すればもちろん値としてもあるわけですが・・・)
考えてると結果こうなってしまいました。
もっとスマートな方法はないものかと・・・
0 件のコメント:
コメントを投稿