まくまくPHPノート
CakePHP 入門 (9) レコードを削除できるようにする
2012-05-04

ここでは、指定した ID のレコードを削除できるようにします。 http://localhost/tasks にアクセスしたときに、以下のように Delete リンクを表示するようにします。

./abc-9-001.png

ただし、単純な GET リクエストでレコードを削除できるようにしてしまうと、ブラウザに URL を入力したときや、Web クローラのアクセスだけで削除されてしまうので、削除には必ず POST リクエストを使うように制限します。

以下のように、TasksControllerdelete アクションを追加します。

app/Controller/TasksController.php

<?php
class TasksController extends AppController {
    public $components = array('Session');
    ...
    public function delete($id) {
        if ($this->request->is('get')) {
            throw new MethodNotAllowedException();
        }
        if ($this->Task->delete($id)) {
            $this->Session->setFlash('The task has been deleted.');
            $this->redirect(array('action' => 'index'));
        }
    }
}

delete 用のページは作らずに、一覧ページ (index) のリンクから削除できるようにします。 POST リクエストを使うリンクを生成するには、FormHelperpostLink() を使用します。

$this->Form->postLink('Delete',
    array('action' => 'delete', $id),
    array('confirm' => 'Are you sure?'));

app/View/Tasks/index.ctp

<h1>Task List</h1>

<table>
    <tr>
        <th>ID</th><th>Title</th><th></th><th></th><th>Created</th>
    </tr>
    <?php foreach ($tasks as $t):
        $id = $t['Task']['id'];
        $title = $t['Task']['title'];
        $created = $t['Task']['created'];
    ?>
    <tr>
        <td><?php echo $id ?></td>
        <td><?php echo $this->Html->link($title,
            array('controller' => 'tasks', 'action' => 'view', $id)) ?></td>
        <td><?php echo $this->Html->link('Edit',
            array('controller' => 'tasks', 'action' => 'edit', $id)) ?></td>
        <td><?php echo $this->Form->postLink('Delete',
            array('controller' => 'tasks', 'action' => 'delete', $id),
            array('confirm' => 'Are you sure?')) ?></td>
        <td><?php echo $created ?></td>
    </tr>
    <?php endforeach; ?>
</table>

CakePHP 入門記事一覧

2012-05-04