我有一个我正在处理的多租户应用程序,在添加社交名录包时,我尝试从数据库加载特定网站的自定义facebook client_id和client_secret。我无法真正使用env变量,因为每个站点都有自己的自定义facebook键。
似乎你无法在config / services.php文件中真正调用模型的方法,因为它可能尚未加载。我已经尝试通过请求生命周期文档解决此问题无济于事。
我还尝试创建一个服务提供程序,以便从我的Business模型的方法中获取值并将其设置为常量,但是,当它在应用程序中可用时,仍然加载了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',
],
错误:
致命错误:在null
上调用成员函数connection()
答案 0 :(得分:2)
这是我正在谈论的一个非常简单的例子。
使用以下内容,我可以在初始化应用程序的其余部分之前查询数据库,获取一些详细信息并将其写入配置文件。
了解我如何访问路线中的值?
// 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'));
});
答案 1 :(得分:2)
你真的不应该这样做。从模型初始化数据库连接需要加载所有配置,并且您打算使用这些连接来定义配置。你发现自己有一个循环依赖问题。
我想建议您查看您尝试使用的社交名媛套餐。如果服务中不存在用于在运行时设置/覆盖凭据的工具,请查看您是否能够使用您自己的实现来扩展服务。我认为这将是实现你想要做的事情的唯一途径。
除此之外,配置文件应该只由标量值和数组组成,以便可以缓存它们。