我正在研究一个幼虫项目,当用户注册时,该项目有两个事件。一个事件将为用户创建所有角色和权限,另一个事件将向用户发送欢迎电子邮件。在事件服务提供商中,我有:
protected $listen = [
'App\Events\NewUser' => [
'App\Listeners\CreateAuthorization',
'App\Listeners\SendWelcomeEmail',
],
];
在新的用户事件中,我让用户在构造函数中传递,如下所示:
class NewUser
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
}
到目前为止,我尝试过只实现一个侦听器,那就是CreateAuthorization
侦听器
class CreateAuthorization
{
public function __construct()
{
//
}
public function handle(NewUser $event)
{
//
Log::info('This is some useful information.');
$user_role = new UserRole();
$user_role->user_id = $event->user->id;
$user_role->permission_id = $role->id;
$user_role->save();
}
}
在用户的模型类中,我将其链接在一起。
protected $events = [
'created' => NewUser::class
];
我已经尝试清除缓存并记录消息,但是从我在日志中看到的消息甚至没有显示,这使我认为在创建用户时甚至没有触发事件。我对如何解决这个问题感到非常失望。
答案 0 :(得分:0)
基于laravel文档,我也进行了测试。
// Wrong
protected $events = [
'created' => NewUser::class
];
正确的应该是
// Correct
protected $dispatchesEvents = [
'created' => NewUser::class
];
上详细了解相关信息