azzazkhan / modular-laravel
在您的Laravel应用中添加模块化功能
v1.0.3
2024-04-26 19:42 UTC
Requires
- php: ^8.3
- archtechx/enums: ^1.0
- laravel/framework: ^11.0
- livewire/livewire: ^3.0
- wikimedia/composer-merge-plugin: ^2.1
This package is auto-updated.
Last update: 2024-09-26 20:28:00 UTC
README
本软件包旨在为您的Laravel 11应用添加模块化功能。本软件包受Laracasts上的Modular Laravel系列启发,并提供用于构建模块及其组件的有用Artisan命令。
请注意,本软件包仅用于个人使用,不建议公开使用。
如果您喜欢此软件包并希望进行自定义修改,请随意进行分支并添加相关更改。
要安装此软件包,请在您的Laravel应用中运行以下命令。
composer require azzazkhan/modular-laravel
在安装此软件包时,Composer将要求允许wikimedia/composer-merge-plugin
插件。应允许使用该插件,因为它对于正确注册每个模块的组件是必需的。除了允许插件外,您还需要在composer.json
文件的extra
属性中定义合并插件的配置。
{ "extra": { "laravel": { "dont-discover": [] }, "merge-plugin": { "include": [ "modules/*/composer.json" ] } } }
接下来,您需要将bootstrap/app.php
中的默认路由定义替换为以下内容。指定的RouteService
将注册您的应用默认的web
、api
和健康路由。它还公开了一些方法,用于为您的应用每个模块正确注册web和api路由。事件配置用于在所有应用模块中自动发现Laravel 11的强类型事件监听器。
use Azzazkhan\ModularLaravel\Services\RoutingService; use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; use Illuminate\Support\Facades\App; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( using: fn () => App::call(RoutingService::class), commands: __DIR__ . '/../routes/console.php', ) ->withMiddleware(function (Middleware $middleware) { // }) ->withExceptions(function (Exceptions $exceptions) { // })->create();
最后,更新您的phpunit.xml
文件,并添加testsuite
、source/include
和source/exclude
条目,以便PHPUnit在发现测试时扫描模块目录。
<?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php" colors="true" > <testsuites> <testsuite name="Modules"> <directory>modules/*/tests/Feature</directory> <directory>modules/*/tests/Unit</directory> </testsuite> </testsuites> <source> <include> <directory>modules</directory> </include> <exclude> <directory>modules/*/database</directory> <directory>modules/*/resources</directory> <directory>modules/*/tests</directory> </exclude> </source> </phpunit>
注意,此软件包提供的所有module:*
命令与其make:*
对应命令具有相同的目的,尽管进行了一些修改以简化构建过程。
- 所有支持
--test
选项的命令都仅生成相应的Pest测试。 - 控制器、种子、工厂和观察者命令在执行命令时,如果未提供,将始终在类名后附加相关的Controller/Seeder/Factory/Observer/Request后缀。
- 控制器生成命令不支持资源相关操作。
- 需要手动在模块的服务提供者中注册事件监听器,因为Laravel不支持在
app
目录外发现强类型事件监听器。