我需要在发送(或正在发送)电子邮件时执行一些代码。我的应用程序正在运行Laravel 5.3。我按照here指示并注册了LogSentMessage事件监听器。
到目前为止,这是我的代码:
app/Listeners/LogSentMessage.php
:
<?php
namespace App\Listeners;
use Illuminate\Mail\Events\MessageSending;
class LogSentMessage
{
public function __construct()
{
//
}
public function handle(MessageSending $event)
{
logger('Hello World');
}
}
app/Listeners/EventServiceProvider.php
:
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
'Illuminate\Mail\Events\MessageSending' => [
'App\Listeners\LogSentMessage',
],
];
public function boot()
{
parent::boot();
//
}
}
它在两个不同的开发环境中完美地工作,听众记录了“Hello World&#39;但它在我的生产环境中不起作用。可能是什么造成的?我使用数据库队列驱动程序将电子邮件发送存储为作业但根据它不应该成为问题:
Laravel在发送邮件之前触发事件。请记住,发送邮件时会触发此事件,而不是在排队时触发。您可以在EventServiceProvider中注册此事件的事件监听器:
另外,我的制作环境是通过Laravel Forge
创建的Homestead图像答案 0 :(得分:2)
队列工作程序将应用程序存储在内存中。因此,如果您在首次启动队列侦听器之后添加了记录器,请确保运行php artisan queue:restart
以刷新作业:
请记住,队列工作程序是长期存在的进程,并将引导的应用程序状态存储在内存中。因此,他们在启动代码库后不会注意到更改。因此,在部署过程中,请确保重新启动队列工作程序。
来源:sprintf()