Php Laravel中共享组件包中的配置文件 介绍

Php Laravel中共享组件包中的配置文件 介绍,php,laravel,laravel-5,composer-php,laravel-5.5,Php,Laravel,Laravel 5,Composer Php,Laravel 5.5,我有一个巨大的项目,其中包含许多负责不同事情的Laravel项目。这些项目部分共享相同的数据库(用户、权限、角色、日志…),例如,有一个项目用于处理所有其他项目的用户数据和权限 例如,在本例中,项目中存在重复的模型(用户、权限、角色)。我通过构建独立的包来解决这个问题,该包将作为Composer包包含到所有共享这些模型的项目中 问题 我的问题是关于所需包的配置。例如,现在我使用来处理权限和角色。我的每个项目在这些包中共享相同的配置更改 在我的共享包中有没有办法处理这些配置 一个包可以覆盖另一个

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

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

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

  • 在我的共享包中有没有办法处理这些配置
  • 一个包可以覆盖另一个包的配置文件吗
  • Laravel实际上是如何处理在所需包中存在同名配置文件的情况的
创建共享服务 您可以创建一个包,并让所有项目将其注册为 附属国。使用该包覆盖所有依赖项配置文件

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

例如:

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

        $this->registerBladeExtensions();
    }
}
如果您使用的是Laravel 5.5或更高版本,您可能需要为您的每个依赖项提供一个服务,以防止您的依赖项的服务提供商被使用。改为在
composer.json
中注册服务提供商

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