将GET参数添加到Laravel的重定向方法中

8

我使用laravel 5.6

我有一个GET参数,我想将其传递给重定向函数。

Route::get('/about', function () {
   //I want to add param to this redirect function
   return redirect('/en/about');
});

如果路由看起来像 /about?param=123,重定向后 param 将会丢失。有没有办法在重定向方法中添加参数?我发现这个函数不包括输入参数。该参数是可选的,因此可能不会提供。也许有办法覆盖这个函数?或者其他解决方案?所有建议都将不胜感激。
更新:
是否可以覆盖 redirect() 方法?我认为在我的情况下这将是最好的解决方案。
6个回答

15
你需要在URL中获取参数,并将其传递给重定向方法中的数组。
Route::get('/about/{param}', function () {
   return \Redirect::route('/en/about', ['param'=>$param])
});

无需使用命名路由

Route::get('/about/{param}', function () {
   return redirect('/en/about', ['param'=>$param])
});

对于可选参数

Route::get('/about/{param?}', function ($param = 'my param') {
   return redirect('/en/about', ['param'=>$param])
});

谢谢你的回复,但在这种情况下,我必须首先创建命名路由。 - devnull Ψ
1
由于某些原因,它无法识别参数。我像 /about/{param?}, function($param=null) 这样添加了它,因为它是可选的,但是我无法获取值。 - devnull Ψ
我已经更新了答案。你尝试过带参数和不带参数的路线吗? - Sujan Gainju
不确定是否与版本有关,但我需要将参数传递给函数调用。即 function ($param) - matt

6

是的,您可以重定向到命名路由并传递参数,像这样:

return redirect()->route('en.about', ['param' => 123]);

谢谢,但是它仍然需要命名路由。有没有不创建命名路由的方法? - devnull Ψ
2
不确定为什么你不能创建一个命名路由?使用它们有很多好处。 - Phiter

5

只需像这样执行:

 return redirect('/en/about?param='.$param);

3
如果您不想添加路由名称,那么您可以通过控制器函数完成相同的操作。
Route::get('/about/{param}', function () {
   return \Redirect::action('CONTROLLER@FUNCTION',['param'=>$param])
});

使用帮助函数的OR操作符
return redirect()->action('CONTROLLER@FUNCTION');

谢谢,但问题是我主要使用的项目只返回视图,它不调用控制器方法。 - devnull Ψ
但是对于重定向,您需要注册该路由。 - DsRaj

2

在您的情况下,最好这样做:


return redirect(route("en.about")."?param=123");

1
Route::get('/about', function () {
   //I want to add param to this redirect function
   return redirect()->to(url('/en/about',['param' => 'Pram vakue', 'param2' => $param]));
});

如果您使用route(),则必须创建一个命名路由。
希望这可以帮助您。

它失败了,“方法url不存在”。可能是在较旧的Laravel版本中。 - devnull Ψ
@devnullΨ请看一下我更新的答案,我打错了一个字。 - PULL STACK DEV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接