Laravel 中共享组件的包中的配置文件

Config files in package for shared components in Laravel

简介

我有一个庞大的项目,其中包含许多 Laravel 个负责不同事情的项目。这些项目部分共享相同的数据库(用户、权限、角色、日志...),例如,有一个项目用于处理所有其他项目的用户数据和权限。

所以在这种情况下,例如项目中存在重复模型(用户、权限、角色)。我通过构建独立包作为 Composer 包包含在所有共享这些模型的项目中解决了这个问题。

问题

我的问题是关于所需软件包的配置。例如,现在我使用 Spatie's Permission package 来处理权限和角色。我的每个项目在这些包中共享相同的配置更改。

创建共享服务

您可以创建一个包并将您的所有项目注册为 依赖。使用该包覆盖所有依赖项配置文件。

在您的共享服务中,您需要为每个您希望覆盖的服务提供者创建一个服务提供者。扩展您的依赖项的服务提供者并使用 register 方法加载您自己的配置文件而不是您的依赖项的配置文件。

例如:

class SharedPermissionServiceProvider extends PermissionServiceProvider
{
    public function register()
    {
        if (isNotLumen()) {
            $this->mergeConfigFrom(
                __DIR__.'/../config/permission.php',
                'permission'
            );
        }

        $this->registerBladeExtensions();
    }
}

如果您使用 Laravel 5.5 或更高版本,您可能需要为每个依赖项 opt-out of package auto-discovery 以防止使用依赖项的服务提供者。请改为在 composer.json 中注册您的服务提供商。

如果您使用的是 Laravel 5.4 或更低版本,或者如果您要覆盖不使用自动发现的服务提供商,请从 config/app.php 中删除依赖项的服务提供商并添加您自己的服务提供商.