php - 如何使包配置将其不存在的键合并到 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 [];
解决方案
您(或用户)需要在php artisan vendor:publish
发布包的配置文件之前运行命令(复制到config
文件夹中,或指定的文件夹中)
从文档
现在,当您的包的用户执行 Laravel 的
vendor:publish
命令时,您的文件将被复制到指定的发布位置。
如果要发布特定的包供应商文件,只需将包服务提供者作为选项传递给命令:
php artisan vendor:publish --provider="Your\Package\ServiceProvider"
重要
如果要发布的文件已存在于目标文件夹中,您将需要使用以下--force
选项运行命令:
php artisan vendor:publish --force
推荐阅读
- dropbox - 如何响应 Dark 中的 Dropbox webhook 挑战?
- postgresql - pq:重复键值违反唯一约束“pg_type_typname_nsp_index”
- html - 仅在背景的一部分上设置背景颜色
- delphi - 如何在服务器活动时绑定新的服务器绑定
- excel - 按数字顺序在页面上写下重复的数字。(图片可能更有意义。)
- python-3.x - 如何删除python中的空格
- c++ - 堆栈因试图产生缓冲区溢出而完全搞砸了
- python - 字典中的纸浆变量定义
- python - 带有 Python 的套接字:监听命令以启动或停止循环
- sql - 根据哪一列在一行中具有更大的值进行分类