【问题标题】:add get parameter to laravel's redirect method在 laravel 的重定向方法中添加 get 参数
【发布时间】:2019-02-25 07:25:21
【问题描述】:

我使用 laravel 5.6

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

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

如果重定向后路由看起来像/about?param=123param 将丢失。有没有办法将参数添加到重定向方法?如我所见,此函数不包含输入参数。该参数是可选的,因此可以不提供。也许有办法覆盖这个功能?或其他一些解决方案?所有建议将不胜感激

更新

是否可以覆盖redirect() 方法?我认为就我而言,这将是最好的解决方案

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    您必须在 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])
    });
    

    【讨论】:

    • 谢谢,但在这种情况下,我必须首先创建命名路由
    • 由于某些原因它看不到参数。我像/about/{param?}, function($param=null) 一样添加它,因为它是可选的,但我无法获得价值
    • 我已经更新了答案。您是否尝试过传递参数和不传递参数的路线?
    • 不确定是否与版本有关,但我需要将参数传递给函数调用。即function ($param)
    【解决方案2】:

    是的,您可以redirect to named routes 并传递参数,如下所示:

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

    【讨论】:

    • 谢谢,但它再次需要命名路由。有没有办法在不创建命名路由的情况下做到这一点?
    • 不确定,为什么不能创建命名路由?使用它们有很多好处。
    【解决方案3】:

    只需这样做:

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

    【讨论】:

      【解决方案4】:

      如果你不想添加路由名称,那么你可以对控制器功能做同样的事情

      Route::get('/about/{param}', function () {
         return \Redirect::action('CONTROLLER@FUNCTION',['param'=>$param])
      });
      

      或与辅助函数

      return redirect()->action('CONTROLLER@FUNCTION');
      

      【讨论】:

      • 谢谢,但问题是我使用的项目大多只是返回视图,它没有调用控制器方法
      • 但是对于重定向,你需要注册那个路由
      【解决方案5】:

      在你的情况下最好这样做:

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

      【讨论】:

        【解决方案6】:
        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(),那么你必须创建一个命名路由。

        希望对你有帮助

        【讨论】:

        • 它失败了,method url does not exist。也许它是在较旧的 laravel 版本中
        • @devnullΨ 看看我有错字的更新答案
        猜你喜欢
        • 2020-02-04
        • 2018-11-14
        • 2020-06-12
        • 1970-01-01
        • 2016-10-09
        • 2023-03-25
        • 2020-06-19
        • 2014-12-30
        • 1970-01-01
        相关资源
        最近更新 更多