Laravel 将 url 参数从控制器传递到路由
Posted
技术标签:
【中文标题】Laravel 将 url 参数从控制器传递到路由【英文标题】:Laravel pass url parameter from controller to route 【发布时间】:2021-01-28 17:35:24 【问题描述】:如何将参数从控制器传递到路由。例如,在我的控制器中,我想将用户重定向到路由,并将 ?userID=xyz 附加到路由。我该怎么做? 所以在我的控制器中
public function mymethod()
return route('getmydata', ['data'=> 1]);
我有一个名为 getmydata 的路由
Route::get('/data/data', function (Request $request, $data)
...
)->name('getmydata');
如何在我的控制器中传递 ?userID 以便我的路由可以是 /data/data?userID=xyz
谢谢
编辑仍然无法正常工作:
我的控制器:
public function mymethod()
$userID = xyz;
return route('getmydata', ['data'=> 1, 'userID' => $userID]);
然后在我的路线上:
Route::get('/data/data/', function ($data, $userID)
...
)->name('getmydata');
我来了
"Too few arguments to function App\\Providers\\RouteServiceProvider
我正在传递两个参数并期待两个。我错过了什么?
路由应该是 /data/data?userID=xyz
【问题讨论】:
【参考方案1】:您应该将它传递给queryparams
并通过$request
对象检索它们。
Route::get('/data/data', function (Request $request, $data)
$userID = $request->userID; // or $request->get('userID')
)->name('getmydata');
【讨论】:
【参考方案2】:您可以通过这种方式将参数从 controller 传递到 route:
return redirect()->route('getmydata', ['data'=> 1]);
// 127.0.0.1:8000/data/1
带GET
参数:
return redirect()->route('getmydata', ['data' => 1]);
// 127.0.0.1:8000/data?data=1
更新:如果你想要这样的 URL http://127.0.0.1:8000/data/data?userID=xyz
,那么可以通过在路由中传递额外的参数来实现:
Route::get('/data/data', function (Request $request, $data) ... )->name('getmydata');
return redirect()->route('getmydata', ['data'=> 1, 'userID' => 'xyz']);
// 127.0.0.1:8000/data/1?userID=xyz
【讨论】:
以上是关于Laravel 将 url 参数从控制器传递到路由的主要内容,如果未能解决你的问题,请参考以下文章