Laravel 5.5用户注册事件监听器未触发问题求助
解决Laravel 5.5事件监听器handle()不触发的问题
我一眼就发现了问题的核心——你在EventServiceProvider里的事件与监听器绑定完全错配了!你把自定义的UserRegisteredEmailListener绑定到了默认的App\Events\Event事件上,而不是你自己的UserRegisteredEmail事件,这就导致监听器根本不会被触发。
下面是一步步的修复方案:
1. 修正事件-监听器绑定
打开EventServiceProvider.php,把$listen数组里的键改成你的自定义事件类名,把监听器移到对应的数组里:
class EventServiceProvider extends ServiceProvider { protected $listen = [ // 替换默认事件为你的自定义事件 'App\Events\UserRegisteredEmail' => [ 'App\Listeners\UserRegisteredEmailListener', ], // 保留默认事件绑定(如果需要的话) 'App\Events\Event' => [ 'App\Listeners\EventListener', ], ]; public function boot() { parent::boot(); // } }
2. 清除Laravel事件缓存
Laravel会缓存事件注册信息,尤其是在你修改了EventServiceProvider之后,必须清除缓存才能让新的绑定生效。在WAMP的命令行(进入项目根目录)运行以下命令:
php artisan event:clear php artisan optimize:clear
3. 额外检查(可选)
- 确认你的
UserRegisteredEmail事件和UserRegisteredEmailListener类都正确引入了命名空间,没有拼写错误; - 检查事务逻辑:如果你的事务最终回滚了,那么事务内触发的事件默认不会执行(Laravel事务内的事件会在事务提交后才触发),不过你提到事件已运行,所以这大概率不是问题;
- 可以在
UserRegisteredEmail事件的构造函数里加个dump('event fired'),确认事件确实被触发了。
完成以上步骤后,你的监听器handle()方法应该就能正常执行了!
内容的提问来源于stack exchange,提问作者user3574492
相关产品推荐
相关产品推荐

