为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 包配置不合并

Laravel 包配置不合并

PHP
qq_遁去的一_1 2023-04-28 14:23:17
我正在开发几个包,如果要发布它们,我想为所有这些包提供一个配置文件。在我的服务提供商内部,我这样做了:public function boot(){    $this->publishes([        __DIR__ . '/config/custom.php' => config_path('custom.php'),    ]);}public function register(){    $this->mergeConfigFrom(        __DIR__ . '/config/custom.php', 'custom'    );}配置:return [    'containers' => [        ...    ]];当然,如果我发布它,它会创建一个包含内部值的文件。但是如果一个文件已经存在,有不同的键:return [    'xxxyyy' => [        ...    ],];发布不做任何事情。我希望它看起来像:return [    'xxxyyy' => [        ...    ],    'containers' => [        ...    ]];我究竟做错了什么?
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

如果其他人对此感到困惑,我已经测试了几个案例,这是我的解释。

$this->publishes部分使包配置能够通过vendor:publish命令发布。这里没什么好解释的。

$this->mergeConfigFrompart 使包配置能够与当前发布的副本合并。在这种情况下合并意味着从 Laravelconfig()范围合并。

这意味着如果没有已发布的文件并且您artisan tinker没有. 如果一个文件已发布并且具有其他键值对,这些键值对不存在于您的包配置中而您已经存在,则将返回已发布文件中的合并值数组以及您的配置中的值。config('key')mergeConfigFrommergeConfigFromconfig('key')

如果您的根配置文件夹中存在具有相同配置名称的文件,并且您的包在内部使用相同的配置名称但您没有,mergeConfigFromconfig('key')仅返回根配置文件夹中文件的内容,并将忽略包中的所有内容因为您没有为 Laravel 提供将其视为“全局”配置的方法。您的包将继续在内部使用包配置,但您将无法从应用范围获取它。


查看完整回答
反对 回复 2023-04-28
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信