Laravel 从用户单击的位置分配特定角色

Laravel 从用户单击的位置分配特定角色,laravel,Laravel,我想根据用户单击的按钮分配角色: 例如: -如果您单击“我想成为顾问”,请重定向到Laravel注册表并指定顾问的角色。 -如果用户单击“我想成为买家”,他们将重定向到Laravel注册表并分配买家角色 但我不知道怎么做。 我的“RegisterController”中有此代码: protected function create(array $data) { $user = User::create([ 'name' => $data['name'],

我想根据用户单击的按钮分配角色:

例如: -如果您单击“我想成为顾问”,请重定向到Laravel注册表并指定顾问的角色。 -如果用户单击“我想成为买家”,他们将重定向到Laravel注册表并分配买家角色

但我不知道怎么做。 我的“RegisterController”中有此代码:

protected function create(array $data)
{
    $user = User::create([
        'name' => $data['name'],
        'email' => $data['email'],
       //'password' => Hash::make($data['password']), //mutador en User model
        'password' => $data['password'],
        'surname1' => $data['surname1'],
        'surname2' => $data['surname2'],
        'comunidad_id' => $data['cbx_comunidad'],
        'provincia_id' => $data['cbx_provincia'],  
        'municipio_id' => $data['cbx_municipio'],
    ]);

    //dd(Request::url());
    // $user->assignRole('Asesor');
    //quiero asignar varios roles depende de el botón que clicken

    return $user;

}
现在,我所做的是在调用视图“register”的视图中添加这样一个参数:

href="{{ route('register','Asesor') }}"
在“注册”视图中,以隐藏方式邮寄:

<div class="form-group">
<?php
  $pos = strpos(Request::fullUrl(), '?');                       
  $cadena = substr (Request::fullUrl() , $pos+1, strlen(Request::fullUrl()) );                                                
?>
  <input type="hidden" name="role" id="role" value="{{ $cadena }}">
</div>

但我不知道这样做是否正确。

为用户分配角色

控制器功能类似


我认为,你可以处理这样的事件: 在EventServiceProvider类中,在属性$listen中创建一个项:

'App\Events\User\Created' => ['App\Listeners\User\AssignRoles'],
之后,您将运行以下命令:

php artisan event:generate
现在,您需要在声明受保护属性$dispatchesEvents的用户类中打开此事件,如下所示:

protected $dispatchesEvents = ['created' => 'App\Events\User\Created'];
public $user;

public function __construct(User $user)
{
    $this->user = $user;
}
在用户类中调用完所有的create方法之后,将调用创建的事件并运行AssignRoles逻辑

在App\Events\User\Created类中,您需要将用户注入_构造方法,如下所示:

protected $dispatchesEvents = ['created' => 'App\Events\User\Created'];
public $user;

public function __construct(User $user)
{
    $this->user = $user;
}
记得把用户类的完整路径放进去

这是将由来自User::create方法的数据填充的对象

在Listener AssignRoles中,您已填充与用户链接的事件,您可以通过以下方式获得该事件:

public function handle(Created $event)
{
    $event->user;
    // ...
}
在侦听器AssignRoles中,您可以在_构造方法中获取所有请求的参数:

private $request;
public function __construct(Illuminate\Http\Request $request)
{
    $this->request      = $request;
}
手中有请求的参数时,您可以根据句柄方法中单击的按钮应用逻辑:

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")' />

最后,您需要一个逻辑来设置角色js方法。好看