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

问题描述 投票:5回答:1

Introduction

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

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

Problem

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

  • 有没有办法在我的共享包中处理这些配置?
  • 一个包可以覆盖另一个配置文件吗?
  • Laravel如何实际处理所需包中存在同名配置文件的情况?
php laravel laravel-5 composer-php laravel-5.5
1个回答
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中删除依赖项的服务提供商并添加您自己的服务提供商。

© www.soinside.com 2019 - 2024. All rights reserved.