I have created a service provider in my Laravel Application SettingsServiceProvider
. This caches the settings table from the database.
$settings = $cache->remember('settings', 60, function() use ($settings)
{
return $settings->pluck('value', 'name')->all();
});
config()->set('settings', $settings);
settings
table:
我能够像这样回应表格中的值:
{{ config('settings.sitename') }} //returns Awesome Images
这在App\Http\Controllers
中的任何Blade 文件或控制器上都工作得很好
Problem:
我试着像下面这样将值回复到App\config\mail.php
:
'driver' => config('settings.maildriver'),
'host' => config('settings.mailhost'),
But I'm getting this error:
Missing argument 1 for Illuminate\Support\Manager::createDriver()
Update:
我已经创建了一个新的服务Provider MailServiceProvider
来覆盖邮件中的设置.比如:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Config;
class MailServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
Config::set('mail.driver', config('settings.maildriver'));
Config::set('mail.host', config('settings.mailhost'));
Config::set('mail.port', config('settings.mailport'));
Config::set('mail.encryption', config('settings.mailencryption'));
Config::set('mail.username', config('settings.mailusername'));
Config::set('mail.password', config('settings.mailpassword'));
}
}
But still I am getting the same error!!
Is there any way to override default mail configuration (in app/config/mail.php
) on-the-fly (e.g. configuration is stored in database) before swiftmailer transport is created?