どーも!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メソッドを書いていきます!
コメント