从config/mail.php内部访问larvel-Acess config()

从config/mail.php内部访问larvel-Acess config(),php,laravel,laravel-5.1,Php,Laravel,Laravel 5.1,我有一个表,我存储我所有的配置 服务提供者: class SettingsServiceProvider extends ServiceProvider { public function boot(Factory $cache, SettingRepository $settings) { if(Schema::hasTable('settings')){ $settings = $cache->remember('settings

我有一个表,我存储我所有的配置

服务提供者:

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()
时,返回一个空值


我能做什么?

看不到您在哪里调用
config()
,也看不到在config/mail.php中我只能猜测。。但是您应该能够在config/mail.php中使用
config()

你打什么电话?如果您使用dd(config());在config/mail.php的顶部,您可以看到所有配置变量。如果它返回一个
null
值,那是因为该配置值不存在

您可能还需要一个config/settings.php,它正在加载到服务提供商的
register()
方法中

public function register()
{
    config([
        'config/myfile.php',
    ]);
}

请参阅:

这里的问题是在加载服务提供商之前加载配置文件

您可以改为使用数据库中的“完整”键(表中的名称)保存您的设置,例如
mail.from.address
,并覆盖它们

//从SettingsRepository->List()返回的示例数据
$settigs=[
//您可能要覆盖的邮件配置
'mail.from.address'=>'约翰。doe@example.com',
'mail.from.name'=>'John Doe',
//其他设置
'settings.something'=>'foo',
'settings.else'=>'bar',
];
config()->set($settings);