CakePHP3でFormHelperを使って連動した値を登録する方法
31 回閲覧されました
みなさんこんにちは、jonioです。
今回はFormHelperを使って連動した2つの値を登録する方法のメモになります。
おすすめ参考書
CakePHP3はまだまだ仕事で使われます。
下記の参考書がおすすめです。
リンク
テンプレート
<?= $this->Form->create(null, ['url' => ['controller' => 'コントローラー名', 'action' => 'アクション名'], 'method' => 'post']) ?>
<h2>不在理由名称設定</h2>
<div class="table-container">
<table>
<thead>
<tr>
<th>名称</th>
<th>使用するか</th>
</tr>
</thead>
<tbody>
<?php foreach ($demos as $demo): ?>
<tr>
<td><?= $this->Form->control("input_value[$demo->id][name]", ['type' => 'text', 'value' => $demo->name, 'label' => false]) ?></td>
<td><?= $this->Form->control("input_value[$demo->id][use_flag]", ['type' => 'checkbox', 'value' => 1,'checked' => $demo->use_flag == 1 ? true : false, 'label' => false]) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?= $this->Form->button(__('登録')) ?>
<?= $this->Form->end() ?>
ポイントは14行目と15行目の「input_value[$demo->id]」をそろえることです、そろえることで連動の状態になります。
14行目のname・15行目のuse_flagはカラム名です。
コントローラー
コードを下記にします。
public function edit()
{
$demos = $this->Demos->get($this->Auth->user('id'));
if ($this->getRequest()->is('post')) {
$data = $this->getRequest()->getData('input_value');
foreach ($data as $data_id => $change_data) {
$change_content = $this->Demos->get($data_id);
$change_content = $this->Demos->patchEntity($change_content, $change_data);
if ($this->Demos->save($change_content)) {
$this->Flash->success(__('ok'));
} else {
$this->Flash->error(__('failure'));
}
}
return $this->redirect(['controller' => 'コントローラー名', 'action' => 'アクション名']);
}
}
これでFormHelperを使った時に連動した値の登録ができます。