CakePHP3でFormHelperを使って連動した値を登録する方法

CakePHP3でFormHelperを使って連動した値を登録する方法

33 回閲覧されました

みなさんこんにちは、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を使った時に連動した値の登録ができます。