使用環境
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
に、記述するのが、確実で、一番とってり早い方法です。
Laravel
のPackage Auto Discovery
が、存在しなかった頃の方法ですね。
Package Auto Discovery
Laravel
のPackage Auto Discovery
が使えれば良かったのですが、私の方法では駄目でした。
モジュール構造だと、Composer
のパッケージじゃないので、モジュール内にcomposer.jsonを設置して、extra
を記述しても、Package Auto Discovery
は、機能しません。
試しに、wikimedia/composer-merge-plugin
を使い、merge-extra
をtrue
にしましたが、もちろんダメです。
基本的には、vendor/composer
フォルダ内にあるinstalled.json
に、書き込まれる必要があります。
結局、config/app.php
に記述するのが、一番、楽かな?と、思いました。
モジュール構造について考えるのは、昔、CodeIgniter v2
で、HMVC
を使った名残みたいな感じだと思っていただけると、助かります。
参考リンク
*1:必須ではないです