独学者Fossa

独学していることなど

簡易モジュール構造

使用環境

Name Version
PHP 8.0.7
Laravel 8.49.0

Laravel Modulesを使うのであれば、今回の説明は、全く不要です。

Service Providerを使って、簡易的に、Laravelにモジュール構造を構築します。

composer.json

"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Database\\Factories\\": "database/factories/",
        "Database\\Seeders\\": "database/seeders/",
        "Modules\\": "Modules/",
    }
},

AdminServiceProvider.php

<?php

namespace  Modules\Admin\Providers;

use Illuminate\Support\ServiceProvider;

class AdminServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->mergeConfigFrom(__DIR__.'/../Config/courier.php', 'admin');
        $this->loadRoutesFrom(__DIR__.'/../Routes/web.php');
        $this->loadViewsFrom(__DIR__.'/../Resources/views', 'admin');
    }

モジュール構造の良いところは、必要なくなった場合、フォルダ毎、移動させればいい点です。

逆に書くと、必要な物は、モジュール内に全て、入っているので、管理しやすいです。

それと、Laravel / Laravelのインストールが一回で、済みます。

Composer Merge Pluginを使うと、更に便利になると思います。*1

config/app.phpに記述する

config/app.phpに、記述するのが、確実で、一番とってり早い方法です。

LaravelPackage Auto Discoveryが、存在しなかった頃の方法ですね。

Package Auto Discovery

LaravelPackage Auto Discoveryが使えれば良かったのですが、私の方法では駄目でした。

モジュール構造だと、Composerのパッケージじゃないので、モジュール内にcomposer.jsonを設置して、extraを記述しても、Package Auto Discoveryは、機能しません。

試しに、wikimedia/composer-merge-pluginを使い、merge-extratrueにしましたが、もちろんダメです。

基本的には、vendor/composerフォルダ内にあるinstalled.jsonに、書き込まれる必要があります。

結局、config/app.phpに記述するのが、一番、楽かな?と、思いました。

モジュール構造について考えるのは、昔、CodeIgniter v2で、HMVCを使った名残みたいな感じだと思っていただけると、助かります。

参考リンク

*1:必須ではないです