[英]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.