我有一个庞大的项目,其中包含许多负责不同事物的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
中删除依赖项的服务提供商并添加您自己的服务提供商。