cakephp、editページを追加する

cakePHP(v3.x)を使ってeditページをするときは以下の三つを行いましょう。

ルートの設定

ここで https://hogehoge.jp/articles//edit というURLにとんで特定のIDの記事の編集ページに飛ぶ仕様にしたいとします。 routes.phpにconnectでルートの設定をしましょう。URLに:idを挟むことでedit関数の引数に値が渡せるようになります。

 routes.php

$routes->connect('/articles/:id/edit',
    ['controller' => 'Articles', 'action' => 'edit'],
    ['id' => '\d+', 'pass' => ['id']]
);

Controllerの設定

次にControllerの設定を行いましょう。先ほどのルートの設定でedit関数にidを渡すようにしたのでそれにしたがって

/Controller/ArticlesController.php

public function edit($id = null)
    {
        $login_user_id = $this->Auth->user('id');
        $article = $this->Articles->get($id);
        if ($this->request->is('post')) {
            $postData = $this->request->getData();
            $postData['user_id'] = $login_user_id;
            $article = $this->Articles->patchEntity($article, $postData);
            if ($this->Billings->save($article)) {
                $this->Flash->success(__('The article has been saved.'));
                return $this->redirect(['action' => 'index']);
            }
            $this->Flash->error(__('The article could not be saved. Please, try again.'));
        }

        $this->set(compact('article'));
        $this->render('edit');
    }

このように編集します。

edit.ctpの設定

こちらはAddをする処理時と特に違いはありません。

<?php
<!-- File: src/Template/Articles/edit.ctp -->

<h1>Edit Article</h1>
<?php
    echo $this->Form->create($article);
    echo $this->Form->control('title');
    echo $this->Form->control('body', ['rows' => '3']);
    echo $this->Form->button(__('Save Article'));
    echo $this->Form->end();
?>