どーも!marusukeです!
今回は、前回(【Laminas】edit.phtmlを作る!)の続きで、このAlbumモジュールに特定のid, artist, titleのデータを削除する機能付けます!
deleteActionメソッドの概要
deleteActionメソッドの概要を簡単に説明します。
Get通信とPost通信で、画面遷移とデータの受け渡し、メソッドの実行を振り分けます。
- albumページ→deleteページ(Get通信:albumページ内のdeleteボタンを押した時)
- 画面遷移はalbumページ→deleteページの時、Get通信で遷移し、idを取得し、そのidと一致するartistとtitleを表示する。(1回目のdeleteAction実行時)
- deleteページ→deleteページ→albumページ(Post通信:deleteページ内のYesボタンを押した時)
- deleteページで、削除を実行する”Yes”ボタンを押すと、Post通信でdeleteページに遷移し、AlbumTableインスタンスのdeleteAlbumメソッドを実行し、albumページに遷移する。(2回目のdeleteAction実行時)
deleteActionメソッドを作る
まずはAlbumController内のdeleteActionメソッド内に以下を追記しましょう 。
ファイルの場所は、module/Album/src/Controller/AlbumController.phpです。
public function deleteAction()
{
//1
$id = (int) $this->params()->fromRoute('id', 0);
if (!$id) {
return $this->redirect()->toRoute('album');
}
//2
$request = $this->getRequest();
if ($request->isPost()) {
$del = $request->getPost('del', 'No');
if ($del == 'Yes') {
$id = (int) $request->getPost('id');
$this->table->deleteAlbum($id);
}
return $this->redirect()->toRoute('album');
}
//3
return [
'id' => $id,
'album' => $this->table->getAlbum($id),
];
}
各ブロックごとに説明をしていきます。
- //1について
$id = (int) $this->params()->fromRoute('id', 0);
if (!$id) {
return $this->redirect()->toRoute('album');
}
以前の記事(【Laminas】editActionを追加する!)でも紹介しましたが、
$id = (int) $this->params()->fromRoute(‘id’, 0)のparams()はルートからパラメーターを取得できるコントローラープラングインです。これを用いてルートのidを取得します。
if (!$id) {…}で$idの値がない場合は、albumページに遷移します。
この部分はGet通信とPost通信どちらの場合でも使われるコードになります。
- //2ついて
$request = $this->getRequest();
if ($request->isPost()) {
$del = $request->getPost('del', 'No');
if ($del == 'Yes') {
$id = (int) $request->getPost('id');
$this->table->deleteAlbum($id);
}
return $this->redirect()->toRoute('album');
}
この部分ではPost通信時の処理を記述しています。なので、2回目以降のdeleteAction実行です。
$request = $this->getRequest();の部分でHttpリクエストの内容を取得し、
if ($request->isPost()) {…}ということで、Post通信時はif文の処理を行なっていきます。
$del = $request->getPost(‘del’, ‘No’);の部分は、Post通信のパラメーター(viewscriptのinputタグのname=”del” を後で作ります。)取得しています。今回は、第一引数に’del’、第二引数に’No’があり、第一引数のdelパラメーターに第二引数にNoという値を入れデフォルト値を設定しています。
- //3について
return [
'id' => $id,
'album' => $this->table->getAlbum($id),
];
この部分はGet通信時の処理になります。albumページ内のdeleteボタンを押し、deleteページに遷移した時に押下したdeleteボタンのaritist, titleをviewscriptに渡します。
delete.phtmlを作る
ファイルの場所は、module/Album/view/album/album/delete.phtmlです。
<?php
$title = 'Delete album';
$url = $this->url('album', ['action' => 'delete', 'id' => $id]);
$this->headTitle($title);
?>
<h1><?= $this->escapeHtml($title) ?></h1>
<p>
Are you sure that you want to delete
"<?= $this->escapeHtml($album->title) ?>" by
"<?= $this->escapeHtml($album->artist) ?>"?
</p>
<form action="<?= $url ?>" method="post">
<div class="form-group">
<input type="hidden" name="id" value="<?= (int) $album->id ?>" />
<input type="submit" class="btn btn-danger" name="del" value="Yes" />
<input type="submit" class="btn btn-success" name="del" value="No" />
</div>
</form>
詳しい説明は、以前の記事(【Laminas】add.phtmlを作る!)でしているので割愛します。
formタグのactionは、album/delete/{albumページで押下したdeleteボタンのid}となっているので、delete.phtml内のsubmitボタンを押した時は、もう一度deleteActionメソッドが呼び出されます。
これで、削除機能を実装することができました!
ホームページにAlbumページが表示されるようにする!
最後に、http://localhost:8080/でApplicationモジュールのホームページでなく、Albumページが開くようにします。
module/Application/config/module.config.phpのApplicationのルートを変更します。
開いてみると、
'home' => [
'type' => \Laminas\Router\Http\Literal::class,
'options' => [
'route' => '/',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'index',
],
],
],
となっています。
以下のように書き換えます。
'home' => [
'type' => \Laminas\Router\Http\Literal::class,
'options' => [
'route' => '/',
'defaults' => [
'controller' => AlbumController::class, // <-- ここを書き換えます。
'action' => 'index',
],
],
],
これでAlbumページが開くようになりました!
ここまでで、Albumモジュールのチュートリアルが終わりました!
お疲れ様でした!
次からは、さらに深掘りしたBlogモジュールチュートリアルを進めていきたいと思います!
では!
コメント