我想在具有两个角色的登录系统中使用auth:
当我将路由重定向到用户时,它失败。
我的控制器:
public function profile($id)
{
$santri = Santri::find($id);
return view('santri.profile', ['santri'=>$santri]);
}
我的路线:
Route::group(['middleware' => ['auth', 'checkRole:admin,user']], function () {
Route::get('/santri/{id}/profile', 'SantriController@profile')->name('profiluser');
});
我如何检查角色:
{
$santri = Santri::all();
if(in_array($request->user()->role,$roles))
{
return $next($request);
}
return redirect()->route('profiluser', $santri);
}
错误:
缺少[Route:profiluser] [URI:santri / {id} / profile]所需的参数。
答案 0 :(得分:2)
错误消息:
缺少[Route:profiluser] [URI:santri / {id} / profile]所需的参数。
告诉您缺少此路由的参数:profiluser
正如您在这里看到的那样,您没有使用正确的参数调用路由,而是尝试传递整个对象而不是id,所以要传递的不是这个:
return redirect()->route('profiluser', $santri);
执行以下操作:
return redirect()->route('profiluser', $santri->id);
但是由于您已经传递了整个对象,因此也可以执行此操作,因此将其称为方法B。
您要在此处使用传递的ID查找模型:
public function profile($id)
{
$santri = Santri::find($id);
return view('santri.profile', ['santri'=>$santri]);
}
但是由于您已经传递了整个对象,因此可以执行以下操作:
public function profile(Santri $santri)
{
return view('santri.profile', ['santri' => $santri]);
}
或者这个,在我看来更干净:
public function profile(Santri $santri)
{
return view('santri.profile', compact('santri'));
}
答案 1 :(得分:1)
您需要传递$santry->id
而不是$ santry。将行更改为:
return redirect()->route('profiluser', [$santri->id]);
答案 2 :(得分:0)
根据您的路线:
Route::get('/santri/{id}/profile', 'SantriController@profile')->name('profiluser');
您必须传递用户ID,如下所示:
return redirect()->route('profiluser', ['id' => $request->user()->id]);