Laravel 中共享组件的包中的配置文件
Config files in package for shared components in Laravel
简介
我有一个庞大的项目,其中包含许多 Laravel 个负责不同事情的项目。这些项目部分共享相同的数据库(用户、权限、角色、日志...),例如,有一个项目用于处理所有其他项目的用户数据和权限。
所以在这种情况下,例如项目中存在重复模型(用户、权限、角色)。我通过构建独立包作为 Composer 包包含在所有共享这些模型的项目中解决了这个问题。
问题
我的问题是关于所需软件包的配置。例如,现在我使用 Spatie's Permission package 来处理权限和角色。我的每个项目在这些包中共享相同的配置更改。
- 有什么方法可以处理我的共享包中的这些配置吗?
- 一个包可以覆盖另一个的配置文件吗?
- Laravel实际上是如何处理需要的包中存在同名配置文件的情况?
创建共享服务
您可以创建一个包并将您的所有项目注册为
依赖。使用该包覆盖所有依赖项配置文件。
在您的共享服务中,您需要为每个您希望覆盖的服务提供者创建一个服务提供者。扩展您的依赖项的服务提供者并使用 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
中删除依赖项的服务提供商并添加您自己的服务提供商.
简介
我有一个庞大的项目,其中包含许多 Laravel 个负责不同事情的项目。这些项目部分共享相同的数据库(用户、权限、角色、日志...),例如,有一个项目用于处理所有其他项目的用户数据和权限。
所以在这种情况下,例如项目中存在重复模型(用户、权限、角色)。我通过构建独立包作为 Composer 包包含在所有共享这些模型的项目中解决了这个问题。
问题
我的问题是关于所需软件包的配置。例如,现在我使用 Spatie's Permission package 来处理权限和角色。我的每个项目在这些包中共享相同的配置更改。
- 有什么方法可以处理我的共享包中的这些配置吗?
- 一个包可以覆盖另一个的配置文件吗?
- Laravel实际上是如何处理需要的包中存在同名配置文件的情况?
创建共享服务
您可以创建一个包并将您的所有项目注册为 依赖。使用该包覆盖所有依赖项配置文件。
在您的共享服务中,您需要为每个您希望覆盖的服务提供者创建一个服务提供者。扩展您的依赖项的服务提供者并使用 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
中删除依赖项的服务提供商并添加您自己的服务提供商.