【Laminas】ListControllerにindexActionを実装する

Laminas

どーも!marusukeです!

前回の記事(【Laminas】ModelをControllerに取り込む)の続きで、ListControllerにindexActionを実装します!その後、簡単にview側を実装して、ブラウザに表示してみましょう!

indexActionメソッドを実装する

view側でPostの一覧が表示できるようにします。

流れは、以下の通りです。

  • コントローラーにviewModelメソッドが使えるようにする。
  • PostRepositoryインスタンスのfindAllPostsメソッドを使い、全てのデータを取得する。
  • viewModelメソッドで、Postデータをview側に渡す。

module/Blog/src/Controller/ListController.phpに以下の実装をします。

namespace Blog\Controller;

use Blog\Model\PostRepositoryInterface;
use Laminas\Mvc\Controller\AbstractActionController;
// ViewModelをuse文で読み込みます
use Laminas\View\Model\ViewModel;

class ListController extends AbstractActionController
{
    /**
     * @var PostRepositoryInterface
     */
    private $postRepository;

    public function __construct(PostRepositoryInterface $postRepository)
    {
        $this->postRepository = $postRepository;
    }

    // ここを実装します
    public function indexAction()
    {
        return new ViewModel([
            'posts' => $this->postRepository->findAllPosts(),
        ]);
    }
}

追加で実装した部分を簡単に説明していきます。

ViewModelについて

ViewModelは、view側にレンダリング(データを渡す)ためのメソッドです。通常、コントローラーはviewModelを使用します。

今回は、

return new ViewModel([
    'posts' => $this->postRepository->findAllPosts(),
]);

という連想配列をview側に渡しています。

view側は、$this->postsでコントローラーから渡されたデータを使うことが出来ます。(連想配列なので、foreach文で展開が必要です。)

view側を作成して、ブラウザに表示させる!

これから、コントローラーから渡されたデータをview側で受け取るviewファイルを作成し、ブラウザに表示させましょう!

viewファイルの実装です。

module/Blog/view/blog/list/index.phtml

<h1>Blog</h1>

<?php foreach ($this->posts as $post): ?>
<article>
  <h1 id="post<?= $post->getId() ?>"><?= $post->getTitle() ?></h1>

  <p><?= $post->getText() ?></p>
</article>
<?php endforeach ?>

簡単に説明すると、foreach ($this->posts as $post):でコントローラー側から渡された連想配列

[ ‘posts’ => $this->postRepository->findAllPosts(), ]

を展開して、$postに格納し、$post->getId()、$post->getTitle()、$post->getText()でそれぞれ、id、title、textを取得しています。

早速、ブラウザに表示しましょう!

手順は3つです。

  • terminalで、カレントディレクトリをlaminasのコードを保存しているディレクトリにする
  • php -S 0.0.0.0:8080 -t public public/index.phpで組み込みサーバーを立ち上げる
  • ブラウザでhttp://0.0.0.0:8080を開く

以下の画面がブラウザに表示されるはずです!

ListControllerにindexActionを実装し、view側を実装して、ブラウザに表示することが出来ました!

お疲れ様でした!

次は、データベースからデータを扱うためのモデル(リポジトリクラス)を作っていきます!

コメント

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