Laravel 包配置不合并

我正在开发几个包,如果要发布它们,我想为所有这些包提供一个配置文件。


在我的服务提供商内部,我这样做了:


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' => [

        ...

    ]

];

我究竟做错了什么?


qq_遁去的一_1
浏览 113回答 1
1回答

不负相思意

如果其他人对此感到困惑,我已经测试了几个案例,这是我的解释。$this->publishes部分使包配置能够通过vendor:publish命令发布。这里没什么好解释的。$this->mergeConfigFrompart 使包配置能够与当前发布的副本合并。在这种情况下合并意味着从 Laravelconfig()范围合并。这意味着如果没有已发布的文件并且您artisan tinker没有. 如果一个文件已发布并且具有其他键值对,这些键值对不存在于您的包配置中而您已经存在,则将返回已发布文件中的合并值数组以及您的配置中的值。config('key')mergeConfigFrommergeConfigFromconfig('key')如果您的根配置文件夹中存在具有相同配置名称的文件,并且您的包在内部使用相同的配置名称但您没有,mergeConfigFrom将config('key')仅返回根配置文件夹中文件的内容,并将忽略包中的所有内容因为您没有为 Laravel 提供将其视为“全局”配置的方法。您的包将继续在内部使用包配置,但您将无法从应用范围获取它。
打开App,查看更多内容
随时随地看视频慕课网APP