【Laminas】module.config.phpとcomposer.jsonを作る

Laminas

どーも!marusukeです!

前回の記事の続きで、module.config.phpとcomposer.jsonというファイルを作っていきます!

前回の記事を読んでいない方はこちらです!

module.config.phpとcomposer.jsonの役割

1、module.config.phpの役割

簡単に説明すると、ModuleManagerにディレクトリやファイルの位置を知らせる地図のようなものです。

2、composer.jsonの役割

これもざっくり説明するとcomposer(ライブラリ依存管理ツール)がこのサービスのディレクトリ構造を知るための地図です。

(ざっくりすぎて怒られそうですが。。)

実際に書いてみましょう!

module.config.phpを書いてみる

まず、module.config.phpという名前のPHPファイルを作成しましょう!

位置はここです!

Album
│   ├── config
│   │   └── module.config.php   <= ここです!
│   ├── src
│   │   ├── Controller
│   │   ├── Form
│   │   ├── Model
│   │   └── Module.php  
│   └── view
│       └── album
│           └── album

記述内容は以下です、

module.config.php

<?php

namespace Album;

use Laminas\ServiceManager\Factory\InvokableFactory;

return [
    'controllers' => [
        'factories' => [
            Controller\AlbumController::class => InvokableFactory::class,
        ],
    ],
    'view_manager' => [
        'template_path_stack' => [
            'album' => __DIR__ . '/../view',
        ],
    ],
];

‘controllers’ :文字通り、contorollerの位置を示しています。中のInvokableFactory::classは、AlbumControllerクラスをインスタンス化する便利な道具です。

‘view_manager’ :UIを司るview scriptファイルの位置を示しています。どこかというと、

Album
│   ├── config
│   │   └── module.config.php   
│   ├── src
│   │   ├── Controller
│   │   ├── Form
│   │   ├── Model
│   │   └── Module.php  
│   └── view
│       └── album
│           └── album  <= このディレクトリ内に入るファイルがview scriptです。

module.config.phpの内容はこのような感じです。

composer.jsonを書いてみる

次は、composer.jsonを書いていきましょう!

composer.jsonファイルの位置は、ルートディレクトリの、、、

laminas MVC skeleton
├── COPYRIGHT.md
├── Dockerfile
├── LICENSE.md
├── README.md
├── Vagrantfile
├── bin
├── composer.json
├── composer.lock
├── config
├── data
├── docker-compose.yml
├── module
├── phpcs.xml
├── phpunit.xml.dist
├── psalm.xml
├── public
└── vendor

ここでしたね!

composer.jsonの内容を必要な部分だけ説明すると、

{
    "name": "laminas/laminas-mvc-skeleton",
    "description": "Laminas MVC Skeleton Application",
    "type": "project",
    "license": "BSD-3-Clause",
    "keywords": [
        "laminas",
        "mvc",
        "skeleton",
        "framework"
    ],
    "require": {
        "php": "^7.3 || ~8.0.0",
        "laminas/laminas-component-installer": "^2.4",
        "laminas/laminas-development-mode": "^3.2",
        "laminas/laminas-skeleton-installer": "^0.3",
        "laminas/laminas-mvc": "^3.1.1"
    },
    "autoload": {
        "psr-4": {
            "Application\\": "module/Application/src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "ApplicationTest\\": "module/Application/test/"
        }
    },
    "scripts": {
        "cs-check": "vendor/bin/phpcs",
        "cs-fix": "vendor/bin/phpcbf",
        "development-disable": "laminas-development-mode disable",
        "development-enable": "laminas-development-mode enable",
        "development-status": "laminas-development-mode status",
        "post-create-project-cmd": [
            "@development-enable",
            "php bin/update-gitignore.php",
            "php -r 'if (file_exists(\"bin/remove-package-artifacts.php\")) include \"bin/remove-package-artifacts.php\";'",
            "php -r 'if (file_exists(\"CHANGELOG.md\")) unlink(\"CHANGELOG.md\");'"
        ],
        "serve": "php -S 0.0.0.0:8080 -t public",
        "test": "vendor/bin/phpunit",
        "static-analysis": "vendor/bin/psalm --shepherd --stats"
    },
    "scripts-descriptions": {
        "cs-check": "Run coding standards checks.",
        "cs-fix": "Automatically fix coding standard issues.",
        "development-disable": "Disable development mode.",
        "development-enable": "Enable development mode.",
        "development-status": "Detail whether or not the application is in development mode.",
        "serve": "Start the built-in PHP web server and serve the application.",
        "test": "Run unit tests."
    }
}

“autoload”:この部分がcomposerが読み取る部分であり、自動読み込みのルール”psr-4″を用いて、

“呼び出すときの名前(名前空間プレフィックス)\\”: “実際のディレクトリ構造” という形になっています。

なので、

“Application\\”: “module/Application/src/”は、

module/Application/src/以下のものは、Application\〜で呼び出してね!とcomposerに伝えます。

今回は新たにmoduleディレクトリ配下にAlbumモジュールを足しているので、

"Album\\": "module/Album/src/"

を追記します。

・・・
"autoload": {
        "psr-4": {
            "Application\\": "module/Application/src/",
            "Album\\": "module/Album/src/"
        }
    },
・・・

そして実際にcomposerに読み込んでもらいます。

ターミナルを開き、このcomposer.jsonがあるディレクトリに移動し、

composer dump-autoload

と入力し実行します。すると、

Generating autoload files
Generated autoload files

と表示され、composerへの読み込みが完了します。

ここまでお疲れ様でした。

次の記事は、modules.config.phpへの記述とルーティングについてです!

コメント

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