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

时间:2018-01-01 19:32:58

标签: php laravel laravel-5 composer-php laravel-5.5

简介

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

因此,在这种情况下,项目中有重复的模型(用户,权限,角色)。我通过构建独立包来解决它,将其作为Composer包包含在共享这些模型的所有项目中。

问题

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

  • 有没有办法在我的共享包中处理这些配置?
  • 一个包可以覆盖另一个配置文件吗?
  • Laravel如何实际处理所需包中存在同名配置文件的情况?

1 个答案:

答案 0 :(得分:2)

创建共享服务

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

在共享服务中,您需要为要覆盖的每个服务提供商创建服务提供商。扩展您的依赖项服务提供程序,并使用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的服务提供商,并添加您自己的服务提供商。