将参数传递给路由时未定义路由
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 中发布一半的数据做得不好。我回答了我自己的问题。以上是关于将参数传递给路由时未定义路由的主要内容,如果未能解决你的问题,请参考以下文章