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

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

作成:2015-11-14 08:10
更新:2015-11-14 08:10

■Messagesの削除

残るは、削除の処理です。

データの一覧を表示するindexでは、テンプレートに「Delete」リンクを用意してありました。これは、以下のような形でリンクを生成するようになっていました。
<?= $this->Form->postLink(__('Delete'), 
    ['action' => 'delete', $message->id],
    ['confirm' => __(○○, $message->id)]) ?>

これは、実行すると、例えば以下のような形でタグが出力されます。
<form name="post_xxx" style="display:none;" 
    method="post" action="/messages/delete/1">
    <input type="hidden" name="_method" value="POST"/>
</form>
<a href="#" onclick="if (confirm(○○)) { document.post_xxx.submit(); }
    event.returnValue = false;
    return false;">Delete</a>

このあたりは、Memberのdeleteでも作成したものですのでだいたいわかりますね。/messages/delete/ID番号 という形で送信されたら削除すればいい、というわけです。

下に、deleteアクションのサンプルを掲載しておきます。ここで行っているのは、ごく一般的な削除の処理そのままです。
$message = $this->Messages->get($id);
if ($this->Messages->delete($message))……
まず、Messagesの「get」を使って指定したIDのMessagesインスタンスを取得し、「delete」メソッドを使ってこれを削除する、というものですね。これで削除の処理が完成しました。


――というわけで、MembersMessagesのCRUDについて一通り作成してみました。それにしても、「なんだか素直でない書き方をしているな」という部分があちこちにあったかも知れません。シンプルなコードというより、「どこかで用意されたコードを切り貼りして掲載している感じ」がしたんじゃないでしょうか。

その通り。実は、ここまでのCRUDは、CakePHP3の機能を使って自動生成したものの抜粋だったのです。次回は、その機能について説明しましょう。

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

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

●プログラム・リスト●

public function delete($id = null)
{
    $this->request->allowMethod(['post', 'delete']);
    $message = $this->Messages->get($id);
    if ($this->Messages->delete($message)) {
        $this->Flash->success(__('The message has been deleted.'));
    } else {
        $this->Flash->error(__('The message could not be deleted. Please, try again.'));
    }
    return $this->redirect(['action' => 'index']);
}

※関連コンテンツ

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