2月 212016
モデルを使っていない方法です。

cakephpのチェックボックス
コントローラ
Controller/SamplesController.php
App::uses('AppController', 'Controller'); class SamplesController extends AppController { $rets=array( 0=>array('pid'=>100,'title'=>'a'), 1=>array('pid'=>200,'title'=>'b'), 2=>array('pid'=>300,'title'=>'c'), 3=>array('pid'=>400,'title'=>'d'), 4=>array('pid'=>500,'title'=>'e'), ); $this->set('rets',$rets); $this->modelClass = null; }
解説
- フォームの表示データを$retsに入れてコントローラから渡しています。
- $this->modelClass = null;を設定することで、モデルを読み込まないようにしている。
ビュー
View/samples/index.ctp
<div> <h3>Samples</h3> <table> <thead> <tr> <th>ckeck</th> <th>pid</th> <th>title</th> </tr> </thead> <tbody> <?php echo $this->Form->create(null, array('type'=>'post','action'=>'.')); ?> <?php foreach ($rets as $ret): ?> <tr> <td><?php echo $this->Form->checkbox('pid.',array('value'=>$ret['pid'],'hiddenField' => false,'checked'=> @in_array($ret['pid'], $this->request->data['Sample']['pid']))); ?></td> <td><?= h($ret['pid']) ?></td> <td><?= h($ret['title']) ?></td> </tr> <?php endforeach; ?> </tbody> </table> <?php echo $this->Form->end("送信"); ?>
解説
- $this->Form->create()の第一引数は、モデルを使わないのでnullに。
- $this->Form->checkbox()の第一引数の名前にピリオドをつけることによって、nameの最後に[]がついて、data[Sample][pid][]のような配列になる。
これを、’pid[]’と入れると、data[Sample][pid[]]のようになり、正常になっておかしくなる。 - $this->Form->checkbox()の第二引数の配列に’value’で値を設定できる。
- $this->Form->checkbox()の第二引数の配列にhiddenFieldをfalseに設定することで、 余分なhidden フィールドが生成されるのを防ぐ。
- $this->Form->checkbox()の第二引数の配列のcheckedは、フォーム送信後の選択状態の表示。結果は配列になり、checkboxの標準処理ではチェックできないため、in_arrayで値が選択済みかをチェック。初期状態ではrequest->dataがセットされなくてNoticeが出るので@で警告抑制。
または$this->Form->checkboxの部分を$this->Form->inputにすることもできる。
echo $this->Form->input('pid.', array( 'type'=>'checkbox', 'value'=>$ret['pid'], 'checked'=> @in_array($ret['pid'], $this->request->data['Sample']['pid']) ) );
ネオビットさんを参考にさせていただきました。
http://www.neobit.jp/archives/436
よく読まれている記事
- 応用情報技術者試験の午後対策
- シェルスクリプト内でexpectを使ってSFTP接続
- モジュール強度のわかりやすい図 モジュール結束性 独立性
- ゴール指向要求分析 アイアスター kaos法
- 平成24年春期 午前問22 解き方メモ
この記事を読んだ人は次の記事も読んでいます:
- array()関数で定義された値と同じ数の変数にそれぞれのインデックスを引き渡す
- ■nullpointerexception エラー対応
- mysql 文字化けを防ぐ エンコード
- DateTimeを使った日付の差
- php 関数 引数の省略
- windows7 リモートデスクトップ設定画面がない
- 平成24年春 問24 解き方