CakePHP3 postLinkでデータ削除を行う

テキストリンクの様な見た目でPOSTデータを送信できるFormヘルパーであるpostLink()を用いることによってDBレコードの削除を行うことができます。

postLink()を使うと、POSTで削除用アクションにアクセスできて、削除確認用のアラートも出してくれるため、データ削除に用いるのに向いているとされています。

実際にCakePHP2系で同じことを行っていたサイトを参考に実装してみたのですが、うまくいきませんでした。

理由はdeleteの引数にidを入れるだけでは足らず、オブジェクトをいれないといけなかったみたいです。

私の環境では、以下のコードで実装することができました。

【View】

echo $this->form->postLink(
    '削除',
    array('action'=>'delete', $keyword_id, $user_id),
    array('class'=>'link-style'),
    '本当に削除しますか?'
)

【Controller】

    public function delete($client_id = null)
    {
        $login_user_id = $this->Auth->user('id');
        $group_id = $this->getSelectedGroupId();

        $client = $this->Clients->getClient($group_id, $client_id);
        if(empty($client)){
            throw new NotFoundException(__('Client not found'));
        }

        if ($this->request->is('get')) {
            // GETアクセスだった場合の処理
            throw new ForbiddenException('投稿の削除に失敗しました');
        }

        if ($this->Clients->delete($client)) {
            $this->Flash->success(__('顧客を削除しました'));
        } else {
            $this->Flash->error(__('The client could not be deleted. Please, try again.'));
        }
        return $this->redirect(['action' => 'index']);
    }