将参数传递给路由时未定义路由

Route not defined when passing parameter to a route

提问人:modi 提问时间:1/20/2021 最后编辑:modi 更新时间:1/20/2021 访问量:770

问:

我有一个命名路由,其参数如下所示......

Route::get('/profile/{user_id}', [ProfileController::class, 'profile'])->name('profile');

现在在我的一个控制器中,

我有一个函数可以像这样调用此路由

public function _myFunction($some_data) {
    return redirect()->route('profile', [$some_data->user_id]);
}

在我的职能中,我有这个。ProfileController'sprofile()

public function profile() {

    return view('modules.profile.profile');

}

我已经按照文档和我在 SO 中找到的一些指南进行了操作,但我遇到了同样的错误,

"Route [profile] not defined."

有人可以启发我哪里做错了吗?

这是我的路由/web.php 的样子...

Route::middleware(['auth:web'])->group(function ($router) {

    Route::get('/profile/{user_id}', [ProfileController::class, 'profile'])->name('profile');

});
laravel laravel-8 url-parameters named-routing

评论

0赞 lagbox 1/20/2021
您是否缓存了路由?您正在定义“name”/“as”的行的路由组中显示此路由吗?
0赞 modi 1/20/2021
@lagbox 是的,我已经做到了。顺便说一句,我注意到一些奇怪的事情,我尝试删除路由中的参数并正常调用它,我注意到它在 URL 的末尾有一个哈希值。它看起来像这样:redirect()->route('profile')mysite.com/profile#
0赞 Farid Vatani 1/20/2021
您确定您的用户已登录吗?您的路由需要身份验证。
0赞 modi 1/20/2021
@FaridVatani 是的,我已登录,我尝试在所有通话中使用,我注意到它没有通过该功能ddProfileController'sprofile()
0赞 Farid Vatani 1/20/2021
好的,参数在路由组中使用在哪里?如果不在任何地方使用,请清洁它。$router

答:

0赞 ByWaleed 1/20/2021 #1

调用路由时,应将属性的名称与值一起传递(作为键 vaue 对)。在本例中,您的路由是预期的,因此您的路由生成应如下所示:user_id

return redirect()->route('profile', ['user_id' => $some_data->user_id]);

详细了解如何在 Laravel 中生成命名路由的 URL。

评论

0赞 ByWaleed 1/20/2021
你能在跑步时看到路线吗,有名字吗?php artisan route:list
0赞 modi 1/20/2021
哎呀,我在 SO 中发布半屁股数据做得很糟糕。我回答了自己的问题。
0赞 modi 1/20/2021 #2

我解决了这个问题,这真的是我的错,因为我没有提供更具体的案例信息,让你们感到困惑。

我正在使用社交名媛,并在第三方的回调中打电话。_myFunction()

毕竟问题出在社交名媛的谷歌回调上,而不是放在里面,我做的是把它转移到回调函数上。return redirect()->route('profile', [$user->id])_myFunction()

所以现在看起来像这样......

private $to_pass_user_id;
public function handleGoogleCallback()
{
    try {

        $user = Socialite::driver('google')->user();

        $this->_myFunction($user);

        return redirect()->route('profile', [$this->to_pass_user_id]);

    } catch (Exception $e) {

        dd($e->getMessage());

    }
}

public function _myFunction($some_data) {
 
    ... my logic here
    $this->to_pass_user_id = $some_value_from_the_logic
}