【Laminas】ControllerにaddActionメソッドを追加する!

Laminas

どーも!marusukeです!

今回は前回の記事(【Laminas】Formを作成する!)で作成したFormをブラウザに表示させるaddActionメソッドを作成します!

早速、始めていきましょう!

addActionメソッドを作成する

AlbumController.phpのaddAction内にView scriptに対してFormのデータを渡す記述をします。

module/Album/src/Controller/AlbumController.php

// AlbumFormAlbumを呼び出す記述を追記してください。
use Album\Form\AlbumForm;
use Album\Model\Album;

class AlbumController extends AbstractActionController
{
    //indexAction()は割愛します。

    /* addAction内に追記します */
    public function addAction()
    {
        $form = new AlbumForm();   //①
        $form->get('submit')->setValue('Add');  //①

        $request = $this->getRequest();  //②

        if (! $request->isPost()) {    //②
            return ['form' => $form];
        }

        $album = new Album();  //③
        $form->setInputFilter($album->getInputFilter());  //③
        $form->setData($request->getPost());  //③

        if (! $form->isValid()) {    //④
            return ['form' => $form];
        }

        $album->exchangeArray($form->getData());  //⑤
        $this->table->saveAlbum($album);  //⑤
        return $this->redirect()->toRoute('album');  //⑤

    }

    /* editActionとdeleteActionは割愛します。 */
}

addActionの内容を説明していきます!

//①の部分について

$form = new AlbumForm();   
$form->get('submit')->setValue('Add');  

AlbumFormをインスタンス化し、submitボタンを追加し、ボタン名をAddに変更しています。

//②について

$request = $this->getRequest();  //②

if (! $request->isPost()) {    //②
            return ['form' => $form];
}

$requestに格納されるのは、AlbumControllerオブジェクト内(AbstractControllerからのextends)のgetRequest()メソッド取得できるオブジェクトです。具体的にいうと、Httpリクエストの内容が格納されています。

//③について

$album = new Album();  
$form->setInputFilter($album->getInputFilter());  
$form->setData($request->getPost());  

$albumにAlbumオブジェクトを格納し、AlbumFormインスタンスにInputFilterを設定してます。

$request->getPost()でブラウザから入力されたデータ(artist, title)を$form->setData($request->getPost())の部分で、$form(AlbumFormインスタンス)にデータとしてセットしています。

//④ について

if (! $form->isValid()) {    
            return ['form' => $form];
}

isValid()は、$form->setData(…)でセットされたデータ(artist, title)がValidationに違反していないかを確認します。

違反する場合は、$formのValidation違反するデータ部分にその違反を示すメッセージを格納します。したがって以下の画像のように表示されます。

今回はValidationの違反メッセージを表示するため、Album.php内のvalidation設定(StringLength)を変更しています。

この違反メッセージは、vender/laminas/laminas-validator/src/StringLength.phpにあります。翻訳する方法は、勉強中です。。分かり次第記事を書きます!

//⑤について

$album->exchangeArray($form->getData());  
$this->table->saveAlbum($album);  
return $this->redirect()->toRoute('album');  

$album->exchangeArray($form->getData())では、getData()で$formに格納されたデータを取り出し、exchangeArray()で配列化し、Albumエンティティに格納しています。

$this->table->saveAlbum($album)では、データベースにデータを保存しています。

return $this->redirect()->toRoute(‘album’)では、ルートをalbumに指定して、albumのページへ遷移します。(「http://localhost:8080/album」に戻ります。)

これでaddActionメソッドが完成しました!お疲れ様でした!

次は、viewscriptである、add.phtmlを作っていきます!

コメント

タイトルとURLをコピーしました