前回の記事(【Laminas】module.config.phpとcomposer.jsonを作る)の続きで、今回はmodules.config.phpへの記述とルーティングの設定をしていきます!
modules.config.phpとは
まず、注意です!これは前回の記事で出てきた「module.config.php」ではありません!
「modules.config.php」であります!
modules.config.phpファイルの位置は、
laminas MVC skeleton
├── COPYRIGHT.md
├── Dockerfile
├── LICENSE.md
├── README.md
├── Vagrantfile
├── bin
├── composer.json
├── composer.lock
├── config
│ ├── application.config.php
│ ├── autoload
│ ├── development.config.php -> development.config.php.dist
│ ├── development.config.php.dist
│ └── modules.config.php
├── data
├── docker-compose.yml
├── module
├── phpcs.xml
├── phpunit.xml.dist
├── psalm.xml
├── public
└── vendor
ルートディレクトリのconfig/にあります。
記述内容は、
<?php
/**
* List of enabled modules for this application.
*
* This should be an array of module namespaces used in the application.
*/
return [
'Laminas\Router',
'Laminas\Validator',
'Application',
];
となっています。
modules.config.phpの役割は、「このアプリケーションの中に存在するモジュールをアプリケーションに知らせる。」です。
早速、今回作っているアルバムモジュールをアプリケーションに知らせましょう!
<?php
/**
* List of enabled modules for this application.
*
* This should be an array of module namespaces used in the application.
*/
return [
'Laminas\Router',
'Laminas\Validator',
'Application',
'Album', <= ここに追記しましょう!
];
これでmodules.config.phpは設定は完了です!
次は、ルーティングの設定です。
ルーティングの設定をしましょう!
まず、ルーティングとは何か説明します!
ルーティングとは、HTTPリクエストURIと一致するコントローラーを返す道標のことです。
例としては、https://test.com/home/hello/にアクセス(HTTPリクエスト)したら、アプリケーション内のhomeモジュールからhome/hello/に該当するコントローラー(helloController)を返す(レスポンスする)ということです。
つまり、https://test.com/{モジュール名}/{アクションメソッド名}/{IDなどがあれば}という形になっています。
早速設定していきましょう!
ルーティングファイルは、前回の記事で説明したmodule.config.phpです。
module.config.php
<?php
namespace Album;
// この下の赤アンダーバーの内容を追記してください
use Laminas\Router\Http\Segment;
use Laminas\ServiceManager\Factory\InvokableFactory;
return [
// The following section is new and should be added to your file:
// この下の赤アンダーバーの内容を追記してください
'router' => [
'routes' => [
'album' => [
'type' => Segment::class,
'options' => [
'route' => '/album[/:action[/:id]]',
'constraints' => [
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
],
'defaults' => [
'controller' => Controller\AlbumController::class,
'action' => 'index',
],
],
],
],
],
'controllers' => [
'factories' => [
Controller\AlbumController::class => InvokableFactory::class,
],
],
'view_manager' => [
'template_path_stack' => [
'album' => __DIR__ . '/../view',
],
],
];
赤のアンダーバー部分の説明をしていきます。
①'router' => [
② 'routes' => [
③ 'album' => [
④ 'type' => Segment::class,
⑤'options' => [
⑥ 'route' => '/album[/:action[/:id]]',
⑦'constraints' => [
⑧ 'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
⑨ 'id' => '[0-9]+',
],
⑩ 'defaults' => [
'controller' => Controller\AlbumController::class,
'action' => 'index',
],
],
],
],
],
①〜⑩を軽く説明していきます。
①‘router’と②‘routes’はModuleManagerにルートを伝える書き方です。このまま覚えましょう。
③‘album’は、ルートの名前を指定しています。例えば、ここが’home’の場合はhomeという名前のルートを作ります。とModuleManagerに伝えています。
④‘type’は、ルートのタイプを設定します。タイプはSegmentやLiteralなどがあります。今回のSegmentタイプは、後述しますが、存在するコントローラーやアクションメソッドに一致するものを返すルートタイプです。
⑤‘options’は、⑥⑦の記述をするオプションです。
⑥ ‘route’は、何やら難しいことが書いてあります。。
‘/album[/:action[/:id]]’について説明します。少し長くなります。
[/:action]は、⑦‘constraints’の⑧ ‘action’部分に一致するアクションメソッドのURLを返します 。[/:id]は、⑦‘constraints’の⑨ ‘id’部分の一致するIDを返します。(今回のアルバムモジュールでは後でIDを作ります。)
もっと正確にいうと⑧ ‘action’部分に一致したら、その中で⑨ ‘id’部分に一致するIDを探してURLを返す、という流れです。
⑩ ‘defaults’は、デフォルト(URIが「album/」の時、アクションメソッド名の指定がない時)でレスポンスするコントローラーとアクションメソッドを返します。
ここまでヘビーでしたね。。お疲れ様でした!
次の記事は、コントローラーとビュースクリプトの作成です。
コメント