Я думаю, вы можете работать с такими событиями: В своем классе EventServiceProvider создайте элемент внутри вашего свойства $ listen:
'App\Events\User\Created' => ['App\Listeners\User\AssignRoles'],
После этого вы собираетесь запустить команду:
php artisan event:generate
Теперь вам нужно включить это событие в своем классе User, объявив защищенное свойство $ dispatchesEvents, например так:
protected $dispatchesEvents = ['created' => 'App\Events\User\Created'];
После всего вызова метода create в вашем классе User, событие create будет вызываться и запускать AssignRoles logi c.
В вашем классе App \ Events \ User \ Created вам нужно внедрить User в метод __construct, например:
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
Не забудьте указать полный путь к классу User!
Это объект, который будет заполнен данными, поступающими из метода User :: create.
Внутри слушателя AssignRoles у вас есть событие связан с заполненным пользователем, и вы можете получить его следующим образом:
public function handle(Created $event)
{
$event->user;
// ...
}
Внутри AssignRoles слушателя вы можете получить все требуемые параметры в вашем __construct:
private $request;
public function __construct(Illuminate\Http\Request $request)
{
$this->request = $request;
}
Имея запрошенные параметры в вашей руке, вы можете применить логи c в зависимости от нажатой кнопки внутри метода дескриптора:
public function handle(Created $event)
{
$event->user;
// here is the best place to do all the logic about roles that is going to be attached in this user. E.g:
switch($role = $this->request->role) {
case $role == 'Asesor':
$event->user->roles()->assignRole('Asesor');
break;
case $role == 'Buyer':
$event->user->roles()->assignRole('Buyer');
break;
}
}
Чтобы отправить параметр роли в Запрос, вам нужно создать форму со скрытым элементом,
<input type='hidden' name='role' />
создать более одной кнопки отправки для заполнения роли скрытого элемента
<input type='submit' value='I want to be an Advisor' onClick='setRole("Advisor")' />
<input type='submit' value='I want to be a Buyer' onClick='setRole("Buyer")' />
И, наконец, вам нужен метод logi c для setRole js. Хорошо выглядишь ; -)