【Laminas】Viewを設定し、ブラウザに表示する!

Laminas

どーも!marusukeです!

今回は、前回(【Laminas】Modelを操るコントローラーを作成する!)の続きで、Viewを設定し、データベースに入力したデータの一覧をブラウザに表示していきます!ようやくブラウザに表示されますね!

コントローラーにViewにデータを渡すためのコードを書く

ここで、AlbumControllerに一旦戻り、View Scriptにデータを渡すためのコードを書いていきます。

コントローラーの場所は、module/Album/src/Controller/AlbumController.php内のindexAction()メソッドの中です!


public function indexAction()
    {
        return new ViewModel([
            'albums' => $this->table->fetchAll(),
        ]);
    }

簡単に説明すると、

return new ViewModel([‘albums’ => $this->table->fetchAll() ]);

は、以前の記事(【Laminas】コントローラーとビュースクリプトを作る!)で作成したView ScriptにデータをViewModelオブジェクトとして渡しています。

これで、Controller側の準備はできたので、View Scriptにデータを受け取って表示するUIに関するコードを書いていきましょう!

Viewにコードを記述する

早速、Viewに書いていきましょう!

場所は、module/Album/view/album/album/index.phtmlです!

記述内容は、

<?php

$title = 'My albums';
$this->headTitle($title);  //①
?>
<h1><?= $this->escapeHtml($title) ?></h1>  //②
<p>
    <a href="<?= $this->url('album', ['action' => 'add']) ?>">Add new album</a> 
</p>  //③

<table class="table">
<tr>
    <th>Title</th>
    <th>Artist</th>
    <th>&nbsp;</th>
</tr>
<?php foreach ($albums as $album) : ?> //④
    <tr>
        <td><?= $this->escapeHtml($album->title) ?></td>  
        <td><?= $this->escapeHtml($album->artist) ?></td>  
        <td>
            <a href="<?= $this->url('album', ['action' => 'edit', 'id' => $album->id]) ?>">Edit</a>  //⑤
            <a href="<?= $this->url('album', ['action' => 'delete', 'id' => $album->id]) ?>">Delete</a>
        </td>
    </tr>
<?php endforeach; ?>  //④
</table>

です!

ビューヘルパー($this->headTitle(…)のようなもの)について説明していきます。

//① $this->headTitle($title);について

headTitleビューヘルパーは、<head>セクション内の<title>内に$titleの値を渡します。ちなみに今回のアルバムモジュールのチュートリアルの<head>セクションは、module/Application/view/layout/layout.phtmlに記述があります。

//② <?= $this->escapeHtml($title) ?>について

escapeHtmlビューヘルパーは、クロスサイトスクリプティング攻撃を回避するためのものです。(クロスサイトスクリプティングについて

//③ $this->url(‘album’, [‘action’ => ‘add’])について

urlビューヘルパーは、以前作ったルートを参照します。今回はalbumルートのaddActionを参照する形になっています。

//④ <?php foreach ($albums as $album) : ?><?php endforeach; ?>

View scriptは、Controllerの特定のactionメソッドで返されるViewModelオブジェクトのデータを渡します。したがって、今回の$albumsの場合は、AlbumControllerのindexActionのViewModelオブジェクトの’albums’に割り当てたデータを渡しています。(今回のデータは、id, artist, titleですね!)

これらのデータをforeach文でtitleやartistなどのデータごとに分けています。<td><?= $this->escapeHtml($album->title) ?></td> の部分でデータを表示させています。

//⑤<?= $this->url(‘album’, [‘action’ => ‘edit’, ‘id’ => $album->id]) ?>について

urlビューヘルパーですが、参照するルートは、AlbumControllerのeditActionで、’id’として$album->idのデータを持っていく、という意味になっています。

これでViewを設定できました!

あとはお使いのローカル環境で、http://localhost:8080/albumを開くとブラウザに表示されるはずです!(自分の場合は、http://0.0.0.0:8080/albumです。)

ここまでお疲れ様でした!次は、新しくtitleやartistを追加するために、Formや追加されたデータを保存する機能を作っていきます!

コメント

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