2016-03-29 13 views
1

Ben bütün yapılandırmalarını saklamak bir tablo var ...laravel - Acess yapılandırma() yapılandırma/mail.php 'yi

Hizmet sağlayıcı içinden:

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 
     ); 
    } 
} 

Servis deposu:

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(); 
    } 
} 

Ancak, config/mail.php dosyasında config() kullanmayı denediğimde, boş bir değer döndürülür.

Ne yapabilirdim? config config() ve nasıl aradıklarını nerede/mail.php 'yi sadece .. tahmin edebilirsiniz ama config/mail.php' yi

Ne arıyorsun config() kullanmak gerekir görmeden

cevap

0

? Eğer dd (config()); config/mail.php'nin en üstünde tüm konfigürasyon değişkenlerini görüyorsunuz. null değerini döndürürse, bu yapılandırma değeri mevcut olmadığı içindir.

Ayrıca Servis Sağlayıcınızın register() yöntemine yüklenmiş bir config/settings.php dosyasına da ihtiyacınız olabilir mi?

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

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

1

Buradaki sorun sizin ServiceProvider yüklenmeden önce yapılandırma dosyaları yüklenir olmasıdır.

Bunun yerine yapabilecekleriniz, ayarlarınızı veritabanındaki "tam" anahtarla (tablonuzdaki ad) kaydeder. mail.from.address ve bunların üzerine yaz.

// 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);