我有一个安装了外部Composer软件包的Lumen项目。与Lumen一样,它们存储在vendor
目录中,每个目录都在各自的文件夹中。其中一些软件包有配置文件,我想用自定义文件覆盖它们。
我在注册应用程序后立即使用bootstrap/app.php
在我的$app->configure()
中注册了文件,所以它看起来像这样:
require_once __DIR__ . '/../vendor/autoload.php';
try {
(new Dotenv\Dotenv(__DIR__ . '/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
//
}
$app = new Laravel\Lumen\Application(
realpath(__DIR__ . '/../')
);
$app->withFacades();
$app->withEloquent();
$app->configure('/Configuration/Lumen/app.php');
$app->configure('/Configuration/Lumen/auth.php');
$app->configure('/Configuration/Tymon/jwt.php');
这些文件存在于各自的目录中,并包含我希望Lumen使用的设置,而不是默认值,这些默认值分别位于:
/vendor/laravel/lumen-framework/config/app.php
/vendor/laravel/lumen-framework/config/auth.php
/vendor/tymon/jwt-auth/config/config.php
我遇到的问题是,使用此配置,Lumen似乎忽略了我的自定义文件,而是使用默认值。我在这里做错了什么?
答案 0 :(得分:1)
将您的配置文件放入config/
中,并按文件名在bootstrap/app.php
中注册它们,而.php
文件不结束。
// Your custom config in config/jwt-auth.php
$app->configure('jwt-auth');
答案 1 :(得分:0)
我认为上述任何答案都没有真正回答 OP 想知道如何做的事情。
他们似乎想要的是加载一个 composer 包并将该包配置注册到应用程序中,而无需进行任何类型的手动配置。
有点像您导入标准的 Composer 包,该包使用环境变量构建记录器并自动配置其设置,而无需将该配置添加到应用程序中。那么事情就简单多了。
尽管我假设 OP 知道这会导致一些问题,因为您坚持使用 Composer 包配置您的应用程序,并有一些选项可以在本地覆盖这些设置。
但我想你对此很满意。因此,我想提出这个解决方案
在您的 Composer 包中,创建一个 providers
文件夹,然后将此代码添加到 lumen 服务提供程序类中,在我的示例中,我将其命名为 TestProvider
<?php declare(strict_types=1);
namespace YourLibrary\Providers;
class TestProvider extends \Illuminate\Support\ServiceProvider
{
public function boot()
{
// Because we're using 'require', this needs to be a valid path
$path = __DIR__.'/vendor_config.php';
// Get a configuration object from the service container
$config = app()->make('config');
// An example: Set into the 'app' configuration at a specific subkey
// just to show you can modify the default app configuration
$config->set('app.subkey', require $path);
error_log(json_encode(config('app')));
// An example: Set into the 'vendor.test' configuration at a specific subkey
$config->set('vendor.test', require $path);
error_log(json_encode(config('vendor')));
}
}
如您所见,您可以对 set() 的第一个参数使用点表示法将您的配置插入到应用程序配置中,但理论上要注意命名原因,我想您可以覆盖任何这样的设置,可能是您最终覆盖了整个 config('app')
及其所有设置,从而导致应用部分无法运行。
然后在您的应用程序的 bootstrap.php
文件中,您需要注册此服务提供商,如下所示:
$app->register(YourLibrary\Providers\TestProvider::class);
我已经用我在本地开发的应用程序对其进行了测试,效果很好,而且我已经将它用于具有非常静态配置的库,一切都运行良好。