我有一张桌子,我存放了所有的配置......
服务提供商:
class SettingsServiceProvider extends ServiceProvider
{
public function boot(Factory $cache, SettingRepository $settings)
{
if(Schema::hasTable('settings')){
$settings = $cache->remember('settings', 60, function() use ($settings)
{
return $settings->lists();
});
config()->set('settings', $settings);
}
}
public function register()
{
$this->app->bind(
\App\Repositories\SettingRepository::class
);
}
}
服务存储库:
class SettingRepository{
private $settings;
public function __construct(Setting $settings)
{
$this->settings = $settings;
}
public function update($key, $value = null)
{
if (is_array($key))
{
foreach ($key as $name => $value)
{
$this->update($name, $value);
}
return;
}
$setting = $this->settings->firstOrCreate(['name' => $key]);
$setting->value = $value;
$setting->save();
}
public function lists()
{
return $this->settings->lists('value', 'name')->all();
}
}
但是,当我尝试在config / mail.php文件中使用config()
时,返回一个空值。
我该怎么办?
答案 0 :(得分:1)
这里的问题是配置文件是在加载ServiceProvider之前加载的。
您可以做的是使用数据库中的“完整”键(表格中的名称)保存您的设置,例如mail.from.address
并覆盖它们。
// Example data returned from SettingsRepository->lists()
$settigs = [
// Mail config you might want to overwrite
'mail.from.address' => 'john.doe@example.com',
'mail.from.name' => 'John Doe',
// Other settings
'settings.something' => 'foo',
'settings.else' => 'bar',
];
config()->set($settings);
答案 1 :(得分:0)
没有看到你在调用config()
的位置以及如何在config / mail.php中我只能猜测..但你应该能够在config / mail.php中使用config()
null
值,那是因为该配置值不存在。
您可能还需要在服务提供商的register()
方法中加载的config / settings.php?
public function register()
{
config([
'config/myfile.php',
]);
}