Php Laravel包配置未合并
我正在开发几个软件包,如果要发布它们,我希望为所有软件包提供一个配置文件 在我的服务提供商内部,我做到了以下几点:Php Laravel包配置未合并,php,laravel,service-provider,Php,Laravel,Service Provider,我正在开发几个软件包,如果要发布它们,我希望为所有软件包提供一个配置文件 在我的服务提供商内部,我做到了以下几点: public function boot() { $this->publishes([ __DIR__ . '/config/custom.php' => config_path('custom.php'), ]); } public function register() { $this->mergeConfigFrom
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' => [
...
]
];
我做错了什么?如果其他人对此感到困惑,我已经测试了几个案例,下面是我的解释()
$this->publishes
部件允许通过供应商:publish
命令发布包配置。这里没有什么要解释的
$this->mergeConfigFrom
部分允许将包配置与当前发布的副本合并。在这种情况下,合并意味着从Laravelconfig()
scope中合并
这意味着,如果没有已发布的文件且您没有mergeConfigFrom
,则转到artisan tinker
并运行config('key')
(其中key是配置文件的名称)将不会返回任何内容。如果某个文件已发布,并且具有包配置中不存在的其他键值对,并且您具有mergeConfigFrom
present,config('key')
将返回已发布文件中的值的合并数组以及配置中的值
如果根配置文件夹中存在具有相同配置名称的文件,并且您的包在内部使用相同的配置名称,但您没有
mergeConfigFrom
,config('key')
将只返回根配置文件夹中文件的内容,并且将忽略包中的所有内容,因为您没有为Laravel提供将其视为“全局”配置的方法。您的包将在内部使用包配置,但从应用程序范围中无法获取它 如果存在相同名称的配置文件,则publish
命令不会执行任何操作。它也不合并配置文件,只使用选项--force
覆盖配置文件。如果它不这样做,那么整个mergeConfigFrom
方法的意义是什么?什么是“合并”?它允许用户可以覆盖(合并2个文件中的配置值)包中的一些默认配置值,而无需触摸包源代码。包集['foo'=>'bar']的文件配置中的示例,如果用户想要更改['foo'=>'foobar']
,他们应该在laravel应用程序中发布您的配置文件来实现这一点。vendor:publish--force
将执行您描述的操作,而不使用mergeConfigFrom
我的意思是,这是一个函数,它将配置值从2个文件合并到1个文件中,然后在引导时加载到应用程序中,它不会合并文件内容。你没有做错什么