猿问

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

我想在我的登录系统中使用 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] 的必需参数。


忽然笑
浏览 279回答 3
3回答

红颜莎娜

错误信息:缺少 [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'));}

皈依舞

您需要传递$santry->id而不仅仅是 $santry。将行更改为:return redirect()->route('profiluser', [$santri->id]);

当年话下

根据您的路线:Route::get('/santri/{id}/profile', 'SantriController@profile')->name('profiluser');您必须传递用户 ID,如下所示:return redirect()->route('profiluser', ['id' => $request->user()->id]);
随时随地看视频慕课网APP
我要回答