我需要动态修改邮件SMTP参数,例如MAIL_HOST
和MAIL_USERNAME
。
为此,我正在使用Config::set()
动态设置这些值。
# This code works
Config::set('mail.host', 'smtp.gmail.com');
Mail::to('user@example.com')->send(new myMailable());
如果我不将邮件排队,则上面的代码有效。
当我排队时,似乎Config::set()
无法设置值。
Config::set()
不能用于排队的作业-我创建了一个简单的作业,并将以下代码放入处理程序中。
public function handle()
{
# set the config
Config::set('mail.host', 'smtp.gmail.com');
# confirm config has been set correctly
logger('Setting host to = [' . config('mail.host') . ']');
}
上面的代码创建下面的日志条目。
Setting host to = []
为什么我不能即时更改已排队的作业的Config
?以及如何解决这个问题?
答案 0 :(得分:1)
这是因为Queue worker不使用当前请求。这是一个独立的过程,不会受到配置设置的干扰。
要使其正常工作,您需要使用作业。调度功能获取您的数据,并将其发送到作业本身。在您的控制器中,致电:
JobName::dispatch($user, $settings);
在作业中,您可以相应地设置变量:
public function __construct($user, $settings)
{
$this->user = $user;
$this->settings = $settings;
}
然后使用 handle 方法:
\Notification::sendNow($this->user, new Notification($this->settings));
您可以为此使用常规通知。 请勿将实施ShouldQueue 添加到您的工作中!
答案 1 :(得分:-2)
可以通过传递键/值对的数组来使用配置帮助器在运行时设置配置变量。
config(['mail.host' => 'smtp.gmail.com']);