どーも!marusukeです!
今回は前回の記事(【Laminas】Formを作成する!)で作成したFormをブラウザに表示させるaddActionメソッドを作成します!
早速、始めていきましょう!
addActionメソッドを作成する
AlbumController.phpのaddAction内にView scriptに対してFormのデータを渡す記述をします。
module/Album/src/Controller/AlbumController.php
// AlbumFormとAlbumを呼び出す記述を追記してください。
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を作っていきます!
コメント