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

Posted

技术标签:

【中文标题】将参数传递给路由时未定义路由【英文标题】:Route not defined when passing parameter to a route 【发布时间】:2021-04-24 00:27:39 【问题描述】:

我有一个带有参数的命名路由,看起来像这样......

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

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

我有一个像这样调用这个路由的函数

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

在我的 ProfileController's profile() 函数中,我有这个。

public function profile() 

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


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

"Route [profile] not defined."

谁能告诉我我哪里出错了?

这是我的 routes/web.php 的样子...

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

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

);

【问题讨论】:

您是否缓存了您的路线?您在定义“名称”/“作为”的那一行的路线组中显示这条路线吗? @lagbox 是的,我已经做到了。顺便说一句,我注意到一些奇怪的事情,我尝试删除路由中的参数并像redirect()->route('profile') 一样正常调用它,我注意到它在 URL 的末尾有一个哈希。它看起来像这样:mysite.com/profile# 您确定您的用户已登录吗?您的路线需要身份验证。 @FaridVatani 是的,我已登录,我尝试在所有呼叫中使用 dd,但我注意到它没有通过 ProfileController's profile() 函数 好的,路由组中$router参数在哪里使用?如果没有在任何地方使用,请清洁它。 【参考方案1】:

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

我正在使用社交名流并在第三方回调中调用_myFunction()..

毕竟问题出在社交名流的google回调上,我没有把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

【讨论】:

【参考方案2】:

在调用路由时,您应该将属性的名称与值一起传递(作为键值对)。在这种情况下,您的路线期待user_id,因此您的路线生成应该如下所示:

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

阅读更多关于 Laravel 中的 Generating URLs To Named Routes 的信息。

【讨论】:

你跑php artisan route:list的时候能看到路线,名字吗? dangg,我在 SO 中发布一半的数据做得不好。我回答了我自己的问题。

以上是关于将参数传递给路由时未定义路由的主要内容,如果未能解决你的问题,请参考以下文章

axios 将参数传递给 laravel 路由

如何将 vue.js 值作为参数传递给刀片中的路由

Angular 2:如何将路由参数传递给子路由?

将路由参数传递给组件

将参数传递给路由保护

python中的Typerror(),同时将参数传递给路由[重复]