首页 > 解决方案 > 如何使包配置将其不存在的键合并到 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')
]);

register()我的包ServiceProvider类的方法中。

此外,我还在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 [];

标签: phplaravel

解决方案


您(或用户)需要在php artisan vendor:publish发布包的配置文件之前运行命令(复制到config文件夹中,或指定的文件夹中)

文档

现在,当您的包的用户执行 Laravel 的vendor:publish命令时,您的文件将被复制到指定的发布位置。

如果要发布特定的包供应商文件,只需将包服务提供者作为选项传递给命令:

php artisan vendor:publish --provider="Your\Package\ServiceProvider"

重要 如果要发布的文件已存在于目标文件夹中,您将需要使用以下--force选项运行命令:

php artisan vendor:publish --force

推荐阅读