Динамическая конфигурация почты со значениями из базы данных

Я создал поставщика услуг в своем Laravel Application SettingsServiceProvider . Это кэширует таблицу настроек из базы данных.

 $settings = $cache->remember('settings', 60, function() use ($settings) { return $settings->pluck('value', 'name')->all(); }); config()->set('settings', $settings); 

таблица settings :

введите описание изображения здесь

Я могу повторить значение из таблицы следующим образом:

 {{ config('settings.sitename') }} //returns Awesome Images 

Это отлично работает с любыми файлами или контроллерами blade-серверов в App\Http\Controllers

Проблема:

Я пытаюсь повторить значение для App\config\mail.php следующим образом:

 'driver' => config('settings.maildriver'), 'host' => config('settings.mailhost'), 

Но я получаю эту ошибку:

 Missing argument 1 for Illuminate\Support\Manager::createDriver() 

Обновить:

Я создал нового поставщика услуг MailServiceProvider для переопределения настроек в Mail.php следующим образом:

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

Но все же я получаю ту же ошибку!

Есть ли способ переопределить конфигурацию почты по умолчанию (в app/config/mail.php ) «на лету» (например, конфигурация хранится в базе данных) до создания транспорта swiftmailer?

Борясь в течение 3 дней с этим вопросом, наконец, я выясню способ его решения.

Сначала я создал почтовые mails и заполнил его своими значениями. Затем я создал поставщика MailConfigServiceProvider.php

 <?php namespace App\Providers; use Config; use Illuminate\Support\Facades\DB; use Illuminate\Support\ServiceProvider; class MailConfigServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { if (\Schema::hasTable('mails')) { $mail = DB::table('mails')->first(); if ($mail) //checking if table is not empty { $config = array( 'driver' => $mail->driver, 'host' => $mail->host, 'port' => $mail->port, 'from' => array('address' => $mail->from_address, 'name' => $mail->from_name), 'encryption' => $mail->encryption, 'username' => $mail->username, 'password' => $mail->password, 'sendmail' => '/usr/sbin/sendmail -bs', 'pretend' => false, ); Config::set('mail', $config); } } } } 

А затем зарегистрировался в config\app.php

 App\Providers\MailConfigServiceProvider::class,