为了账号安全,请及时绑定邮箱和手机立即绑定

如何在laravel中使用路由ID作为用户进行身份验证

如何在laravel中使用路由ID作为用户进行身份验证

PHP
忽然笑 2021-12-03 15:05:58
我想在我的登录系统中使用 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] 的必需参数。
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

错误信息:


缺少 [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'));

}


查看完整回答
反对 回复 2021-12-03
?
皈依舞

TA贡献1851条经验 获得超3个赞

您需要传递$santry->id而不仅仅是 $santry。将行更改为:

return redirect()->route('profiluser', [$santri->id]);


查看完整回答
反对 回复 2021-12-03
?
当年话下

TA贡献1890条经验 获得超9个赞

根据您的路线:

Route::get('/santri/{id}/profile', 'SantriController@profile')->name('profiluser');

您必须传递用户 ID,如下所示:

return redirect()->route('profiluser', ['id' => $request->user()->id]);


查看完整回答
反对 回复 2021-12-03
  • 3 回答
  • 0 关注
  • 278 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信