【Laminas】ルートを設定する!

Uncategorized

どーも!marusukeです!

前回の記事(【Laminas】LaminasDbSqlRepositoryFactoryクラスを内容を変更する!)でLaminasDbSqlRepositoryFactoryクラスの内容を変更したので、次は、findPostメソッドで取得した一つのデータをブラウザに表示するためのルートを設定していきます!

どのようなルートにするかを決める!

まずは、ブログの一つの投稿にどのようなURLを割り振るかを考えます。

今回は以下のようなURLにしたいと思います。

  • http://ドメイン名/blog => 投稿された記事が一覧で見れるページ
  • http://ドメイン名/blog/23 => idが23の記事の詳細画面(23の部分が動的です。)

以下のルートになります。

module/Blog/config/module.config.php

namespace Blog;

use Laminas\Router\Http\Literal
use Laminas\Router\Http\Segment;
use Laminas\ServiceManager\Factory\InvokableFactory;

return [
    'service_manager' => [ /* ... */ ],
    'controllers'     => [ /* ... */ ],
    'router'          => [
        'routes' => [
            'blog' => [
                'type' => Literal::class,
                'options' => [
                    'route'    => '/blog',
                    'defaults' => [
                        'controller' => Controller\ListController::class,
                        'action'     => 'index',
                    ],
                ],
                'may_terminate' => true,
                'child_routes'  => [
                    'detail' => [
                        'type' => Segment::class,
                        'options' => [
                            'route'    => '/:id',
                            'defaults' => [
                                'action' => 'detail',
                            ],
                            'constraints' => [
                                'id' => '[1-9]\d*',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
    'view_manager'    => [ /* ... */ ],
];

赤のアンダーライン部分を上から順に説明すると、

‘blog‘について

blog‘ => []部分は、このルートの名前です。配列内にblogルートの設定を記述します。

‘type‘について

type‘ => Literal::class,は、ルートのタイプを指定してます。Literalは、次の配列のoptionsで指定したURL名と一致すると、その後に設定するコントローラーなどを呼び出すよ!というルートのタイプです。

‘option’について

options‘ => []は、①’route’と②’defaults’ => []を設定します。

①’route’はURLを指定します。(http://ドメイン名/blogとなります。)

②’defaults’ => []は、上記の「/blog」をブラウザで開いた時、処理を実行するコントローラーとアクションメソッドを指定します。

‘controller’について

controller‘は、’controller‘ => Controller\ListController::class,という形で、この/blogで実行されるコントローラーを記載します。

‘action’について

action‘は、’controller‘で呼び出されるコントローラーの中のアクションメソッドで実行したいものを記載します。今回は、’index’アクションメソッドを呼び出します。

‘may_terminate’について

may_terminate‘は、子ルートを設定することができます。子ルートとは、今回の「/blog」の後に続くルートのことです。(/blog/45などのように、45の部分のルートを設定します。)

デフォルトでは、falseとなっています。trueにしてその後に’child_routes‘を設定することで、子ルートが使えるようになります。

‘child_route’について

child_routes‘は、’detail‘という配列内に子ルートの設定を記述します。’detail‘というのは故ルート名で、任意で名付けられます。

‘constraints’について

constraints‘は、child_routeのtypeがSegmentタイプなので、options内のroute部分(’/:id’ の部分)がどのような可変的なルートになるかを指定します。

今回の場合は、http://ドメイン名/blog/[id] のように[id]部分が1桁以上の整数が入るので、’id’ => ‘[1-9]\d*’ という記述になっています。

これで、http://ドメイン名/blog/[id]となるルートの設定は完了しました!

ルートタイプは、LiteralタイプやSegmentタイプだけでなく他にもあります。詳細は公式のLaminasドキュメントのComponents laminas-routerにあります。LiteralタイプやSegmentタイプについても詳しく書いてあります。

お疲れ様でした!

次は、このルートでブラウザに表示するために、ListControllerにdetailActionメソッドを書いていきます!

コメント

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