[英]How can I make the package config merge it's non-existing keys into the app config file in laravel 7.x?
我正在开发一些软件包,使我的应用程序更加模块化,并允许用户即时启用/禁用它们,或者在需要时安装其他软件包。
其中一些包将要求用户配置某些属性(例如 api-keys),因此我希望这些包将它们的配置键和值写入<app-root>/config/packages.php
文件(如果密钥尚不存在)。
根据我从 laravel 文档中的理解(虽然有点模糊),我可以使用:
$this->mergeConfigFrom(__DIR__.'/config/config.php', 'packages');
或者
$this->publishes([
__DIR__.'/config/config.php' => config_path('packages.php')
]);
在我的包ServiceProvider
类的register()
方法中。
此外,我还添加了一个echo "called";
的echo "called";
到register()
方法,以便我可以检查代码是否实际执行。
接下来我运行compose dump-autoload
,我在日志输出中看到called
了,但是当我检查<app-root>/config/packages.php
文件时,它仍然有空数组。
使用php artisan config:clear
然后再次运行compose dump-autoload
也没有什么区别。
如何使包配置将其不存在的键合并到<app-root>/config/packages.php
文件中?
这是我的包配置文件的示例:
<?php
return [
'shoutzor' => [
'acoustid' => [
'apikey' => env('SHOUTZOR_ACOUSTID_APIKEY', '')
]
]
];
我的<app-root>/config/packages.php
文件包含:
<?php
return [];
您(或用户)需要在php artisan vendor:publish
包的配置文件之前运行命令php artisan vendor:publish
(复制到config
文件夹中,或指定的文件夹中)
从文档
现在,当你的包的用户执行 Laravel 的
vendor:publish
命令时,你的文件将被复制到指定的发布位置。
如果你想发布一个特定的包供应商文件,你只需要将包服务提供者作为选项传递给命令:
php artisan vendor:publish --provider="Your\Package\ServiceProvider"
重要如果要发布的文件已存在于目标文件夹中,则需要使用--force
选项运行命令:
php artisan vendor:publish --force
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.