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