Laravel 5:如何将数据库值加载到 config/services.php 文件中?

and*_*eda 8 php laravel laravel-5

我有一个正在开发的多租户应用程序,在添加社交名流包时,我尝试从数据库中加载特定网站的自定义 facebook client_id 和 client_secret。我不能真正使用 env 变量,因为每个站点都有自己的自定义 Facebook 密钥。

似乎您不能真正在 config/services.php 文件上调用模型的方法,因为它可能尚未加载。我已经尝试通过请求生命周期文档来解决这个问题,但无济于事。

我还尝试创建一个服务提供者以从我的业务模型的方法中获取值并将其设置为常量,但是当它在应用程序中可用时,config/services.php 文件已经加载。

这是我希望数据库值可用的地方:

配置/services.php

'facebook' => [
  'client_id' => \App\Business::getAppKeys()->fb_client_id,
  'client_secret' => 'your?fb?app?secret',
  'redirect' => 'http://your?callback?url',
],
Run Code Online (Sandbox Code Playgroud)

错误:

致命错误:在 null 上调用成员函数 connection()

fub*_*bar 5

这是我正在谈论的一个非常简单的例子。

在初始化应用程序的其余部分之前,使用以下内容,我可以查询数据库,获取一些详细信息并将它们写入配置文件。

看看我如何能够访问路由中的值?

// app/Providers/ConfigServiceProvider.php

namespace App\Providers;

use App\Models\Country;
use Illuminate\Support\ServiceProvider;

class ConfigServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        $countries = Country::pluck('name', 'iso_code');
        config()->set(['app.countries' => $countries->toArray()]);
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}


// config/app.php

// ...

'providers' => [
    // ...
    App\Providers\ConfigServiceProvider::class,
    // ...
],

// ...


// routes/web.php

Route::get('config', function () {
    dd(config('app.countries'));
});
Run Code Online (Sandbox Code Playgroud)


Jef*_*amp 2

你真的不应该这样做。从模型初始化数据库连接需要加载所有配置,并且您打算使用这些连接来定义您的配置。您发现自己遇到了循环依赖问题。

我想建议您看看您正在尝试使用的社交名流包。如果服务中不存在用于在运行时设置/覆盖凭据的工具,请查看您是否能够使用允许这样做的自己的实现来扩展服务。我认为这将是完成您想要做的事情的唯一方法。

除此之外,配置文件应该仅由标量值和数组组成,以便可以缓存它们。