【Laminas】modules.config.phpへの記述とルーティングの設定

Laminas

前回の記事(【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/」の時、アクションメソッド名の指定がない時)でレスポンスするコントローラーとアクションメソッドを返します。

ここまでヘビーでしたね。。お疲れ様でした!

次の記事は、コントローラーとビュースクリプトの作成です。

コメント

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