我正在开发几个包,如果要发布它们,我想为所有这些包提供一个配置文件。在我的服务提供商内部,我这样做了: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->mergeConfigFrom
part 使包配置能够与当前发布的副本合并。在这种情况下合并意味着从 Laravelconfig()
范围合并。
这意味着如果没有已发布的文件并且您artisan tinker
没有. 如果一个文件已发布并且具有其他键值对,这些键值对不存在于您的包配置中而您已经存在,则将返回已发布文件中的合并值数组以及您的配置中的值。config('key')
mergeConfigFrom
mergeConfigFrom
config('key')
如果您的根配置文件夹中存在具有相同配置名称的文件,并且您的包在内部使用相同的配置名称但您没有,mergeConfigFrom
将config('key')
仅返回根配置文件夹中文件的内容,并将忽略包中的所有内容因为您没有为 Laravel 提供将其视为“全局”配置的方法。您的包将继续在内部使用包配置,但您将无法从应用范围获取它。
- 1 回答
- 0 关注
- 111 浏览
添加回答
举报
0/150
提交
取消