libro
www.tuyano.com
初心者のためのCakePHP3 プログラミング入門

アソシエーション利用のデータアクセス (1) (5/6)

作成:2015-11-07 10:55
更新:2015-11-07 10:55

■Membersデータの更新

続いて、データの更新です。indexでは、「Edit」というリンクを用意しておきました。これをクリックすることで、例えば、
http://localhost:8765/members/edit/1

こんなアドレスで編集ページにアクセスするようになるわけです。したがって、editアクションにデータを編集するためのフォームページを用意し、その表示と、送信した際のデータ更新処理を用意すればいいわけですね。

データの更新をするフォームのテンプレート(edit.ctp)は、こんな具合にフォームを用意しておけばよいでしょう。
<?= $this->Form->create($member) ?>
<fieldset>
    <legend><?= __('Edit Member') ?>
    </legend>
    <?php
    echo $this->Form->input('name');
    echo $this->Form->input('mail');
    ?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>

見ればわかるように、addアクション用のテンプレートとほぼ同じです。フォームタグの生成は、$this->Form->create($member)というようにフォームヘルパーを使って行います。また、Form->inputを使い、namemailの編集フィールドを作っています。こうして作成されたフォームの送信処理を、下のリスト欄のようにeditメソッドで実装しておきます。
$member = $this->Members->get($id, [
    'contain' => []
]);

まず、Membersの「get」を使い、指定のIDのインスタンスを取得します。このとき、第2引数にcontainオプションを用意して、関連するMessagesインスタンスも含めて$member変数に取り出すようにしています。
$member = $this->Members->patchEntity($member, $this->request->data);
if ($this->Members->save($member)) ……

データの更新は、基本的には通常のデータ更新処理と同じです。Membersの「patchEntry」メソッドを使い、$memberに送信フォームの値をマージします。そして「save」を呼び出してインスタンスを保存します。これでデータの更新が実行されます。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

public function edit($id = null)
{
    $member = $this->Members->get($id, [
        'contain' => []
    ]);
    if ($this->request->is(['patch', 'post', 'put'])) {
        $member = $this->Members->patchEntity($member, 
            $this->request->data);
        if ($this->Members->save($member)) {
            $this->Flash->success(__('The member has been saved.'));
            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error(
                __('The member could not be saved. Please, try again.'));
        }
    }
    $this->set(compact('member'));
    $this->set('_serialize', ['member']);
}

※関連コンテンツ

「初心者のためのCakePHP3 プログラミング入門」に戻る