アソシエーション利用のデータアクセス (1) (5/6)
作成:2015-11-07 10:55
更新:2015-11-07 10:55
更新:2015-11-07 10:55
■Membersデータの更新
続いて、データの更新です。indexでは、「Edit」というリンクを用意しておきました。これをクリックすることで、例えば、
こんなアドレスで編集ページにアクセスするようになるわけです。したがって、editアクションにデータを編集するためのフォームページを用意し、その表示と、送信した際のデータ更新処理を用意すればいいわけですね。
データの更新をするフォームのテンプレート(edit.ctp)は、こんな具合にフォームを用意しておけばよいでしょう。
見ればわかるように、addアクション用のテンプレートとほぼ同じです。フォームタグの生成は、$this->Form->create($member)というようにフォームヘルパーを使って行います。また、Form->inputを使い、nameとmailの編集フィールドを作っています。こうして作成されたフォームの送信処理を、下のリスト欄のようにeditメソッドで実装しておきます。
$member = $this->Members->get($id, [
'contain' => []
]);
まず、Membersの「get」を使い、指定のIDのインスタンスを取得します。このとき、第2引数にcontainオプションを用意して、関連するMessagesインスタンスも含めて$member変数に取り出すようにしています。
データの更新は、基本的には通常のデータ更新処理と同じです。Membersの「patchEntry」メソッドを使い、$memberに送信フォームの値をマージします。そして「save」を呼び出してインスタンスを保存します。これでデータの更新が実行されます。
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を使い、nameとmailの編集フィールドを作っています。こうして作成されたフォームの送信処理を、下のリスト欄のように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」を呼び出してインスタンスを保存します。これでデータの更新が実行されます。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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 プログラミング入門」に戻る