一括でテーブルを編集したいことがありますよね。
ASP.NETだとRepeaterとか使えば簡単に出来ますが、CakePHPでもちょっとしたコツで簡単に実装できます。
メニューテーブルを全部表示して登録する例です。
ビューはこのようになります。
これで結局、idなどがMenu0Idみたいな形になって、複数レコードの表示ができます。<?php echo $this->Form->create('Menu'); ?>
<?php echo $this->Form->submit('店舗メニューを登録する');
?><table>
<thead>
<tr>
<th>ID</th>
<th>メニュー名</th>
</tr>
</thead>
<?php foreach($data as $key => $menu):?>
<tr>
<td><?php echo $this->Form->input("{$key}.id", array('type' => 'text', 'value' => $menu['Menu']['id'])); ?></td>
<td><?php echo $this->Form->input("{$key}.name", array('value' => $menu['Menu']['subname'], 'label' => false)); ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php echo $this->Form->end(); ?>
コントローラーは以下としました。
function multiregist() { //登録 if($this->request->isPost()){ if($this->Menu->saveAll($this->request->data['Menu'])) { $this->Session->setFlash('メニューを登録しました', 'default', array('class' => 'alert alert-success')); } else { $this->Session->setFlash('登録に失敗しました', 'default', array('class' => 'alert alert-error'));
} }
//データ取得 $data = $this->Menu->find('all'); $this->set('data', $data); }
これだけです。
saveAll一発で登録できてしまうので便利です!
実際に作成したものはもっと項目が多かったのですが、なぜか登録時に一定レコードまでしかPOSTされず、かなり悩みました。
CakePHPのrequestとかでデフォルト値が決まってるのか?とか思ったのですがCakePHP関係では一向に情報が出て来ません。
でもさらに調べてみると、PHPのほうでフォームのinputの数に制限がかかっていることがわかりました。
php.iniにmax_input_varsを設定します。
初期値は1000になっているようでした。
max_input_vars = 10000
大きめの数にしてみるとすんなりPOSTできました!
数時間程度悩んでたのですが、見つかってよかったです、ほんと。。
まだまだPHPやCakePHPは初心者だなぁと感じました。
参考になれば幸いです。
0 件のコメント:
コメントを投稿