2016-03-29 73 views
1

我在那裏我存儲我的所有CONFIGS表...Laravel - 接取配置()從裏面配置/ mail.php

服務提供商:

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()內的config/mail.php文件返回空值。

我該怎麼辦?

回答

0

沒有看到你在哪裏調用配置config()以及如何/ mail.php我只能猜測..但你應該能夠使用config()在配置/ mail.php

你在打電話?如果你dd(config());在config/mail.php的頂部可以看到所有的配置變量。如果它返回null值,這是因爲該配置值不存在。

您可能還需要一個config/settings.php,它正在加載到您的服務提供商的register()方法中?

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

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

1

這裏的問題是,加載您的ServiceProvider之前的配置文件被加載。

您可以改爲使用數據庫中的「完整」鍵(表中的名稱)保存設置,例如mail.from.address並覆蓋它們。

// Example data returned from SettingsRepository->lists() 
$settigs = [ 
    // Mail config you might want to overwrite 
    'mail.from.address' => '[email protected]', 
    'mail.from.name' => 'John Doe', 

    // Other settings 
    'settings.something' => 'foo', 
    'settings.else' => 'bar', 
]; 

config()->set($settings);