Мне нужно, чтобы в одном событии было два прослушивателя, и когда в системе был создан пользователь, Лаварель отправил мне электронное письмо с учетными данными, а другой - для назначения ролей пользователей. Возможно ли иметь двух слушателей на одном мероприятии? Почему система показывает мне это сообщение?
Когда я создаю пользователя, система показывает мне:
Слишком мало аргументов для функции App \ Events \ User \ Created :: __ construct ( ), 1 передано в C: \ xampp \ htdocs \ bwm \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Concerns \ HasEvents. php в строке 205 и ровно 2 ожидаемых
Это мое событие:
class UserCreated
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
public $password;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($user,$password)
{
$this->user = $user;
$this->password = $password;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
}
Это мой слушатель Назначить роли:
class AssignRoles
{
private $request;
/**
* Create the event listener.
*
* @return void
*/
public function __construct(Request $request)
{
$this->request = $request;
}
/**
* Handle the event.
*
* @param Created $event
* @return void
*/
public function handle(UserCreated $event)
{
$event->user;
switch($role = $this->request->role)
{
case $role == 'Asesor':
$event->user->assignRole('Asesor');
$asesoria = Asesoria::orderby('created_at', 'desc')->first();
$asesoria->user_id = $event->user->id;
$asesoria->published = true;
$asesoria->update();
break;
case $role == 'Comprador':
$event->user->assignRole('Comprador');
break;
default:
$event->user->assignRole('Writer');
}
}
}
Это мой слушатель Отправить учетные данные для входа:
class SendLoginCredentials
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param Created $event
* @return void
*/
public function handle(UserCreated $event)
{
Mail::to($event->user)->queue(
new LoginCredentials($event->user, $event->password)
);
}
}
В моем хранилище функций моего UsersController я вызываю диспетчер:
UserCreated::dispatch($user, $password);
В моем EventServiceProvider у меня есть это:
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
'App\Events\User\UserCreated' => [
'App\Listeners\User\AssignRoles',
'App\Listeners\SendLoginCredentials',
],
];