Laravel - 来自config / mail.php内部的Acess config()

时间:2016-03-29 18:08:49

标签: php laravel laravel-5.1

我有一张桌子,我存放了所有的配置......

服务提供商:

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

我该怎么办?

2 个答案:

答案 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()

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

您可能还需要在服务提供商的register()方法中加载的config / settings.php?

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

请参阅:https://laracasts.com/discuss/channels/general-discussion/ho-to-access-config-variables-in-laravel-5/replies/25075