azzazkhan/modular-laravel

在您的Laravel应用中添加模块化功能

v1.0.3 2024-04-26 19:42 UTC

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将注册您的应用默认的webapi和健康路由。它还公开了一些方法,用于为您的应用每个模块正确注册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文件,并添加testsuitesource/includesource/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:*对应命令具有相同的目的,尽管进行了一些修改以简化构建过程。

  1. 所有支持--test选项的命令都仅生成相应的Pest测试。
  2. 控制器、种子、工厂和观察者命令在执行命令时,如果未提供,将始终在类名后附加相关的Controller/Seeder/Factory/Observer/Request后缀。
  3. 控制器生成命令不支持资源相关操作。
  4. 需要手动在模块的服务提供者中注册事件监听器,因为Laravel不支持在app目录外发现强类型事件监听器。