簡體   English   中英

如何使包配置將其不存在的鍵合並到 Laravel 7.x 中的應用程序配置文件中?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM