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 参数从控制器传递到路由的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 将变量从中间件传递到控制器/路由

Laravel 将参数从路由传递到过滤器

如何在Laravel 5.2中将表单数据作为路由参数传递

Laravel 4:如何传递多个可选参数

如何将数据从 laravel 传递到 Vue Router?

Laravel入门使用(路由)