【问题标题】:Laravel 4.2 Redirect::to with GET ParamsLaravel 4.2 Redirect::to 与 GET 参数
【发布时间】:2016-08-05 19:09:44
【问题描述】:

是否有可能在 Laravel 4.2 中使用 Redirect::to() 重定向到带有 GET 参数的 url?

当用户未登录时,我正在尝试将登录后的用户重定向到请求的页面。

如果您未登录并访问授权页面,我会将完整请求的 url 保存在会话中(此 url 可以是 https://page.com/settingshttps://page.com/post/23https://page.com/post/23?show=full。很多变体)。

当您登录并在会话中存储一个 url 时,我会使用 Redirect::to(https://page.com/post/23) 重定向您

在前两种情况下没有问题,但是当我使用Redirect::to(https://page.com/post/23?show=full) GET 参数时会被忽略。

是否有一个选项可以重定向到包含 GET 参数的 url?

【问题讨论】:

    标签: php laravel laravel-4.2


    【解决方案1】:

    您的应用程序有问题。如果我理解正确,您的查询参数(例如:?param=true&param2=1)在重定向后不会出现在您的网址中。

    考虑以下示例:

    Route::get('/test', function () {
        return Redirect::to('http://localhost:8000/test2?with=params');
    });
    
    Route::get('/test2', function () {
        echo '1';
    });
    

    当我尝试访问:localhost:8000/test 时,我被重定向到:http://localhost:8000/test2?with=params

    这是预期的行为。你能发布一个你做重定向的例子吗?

    我还建议使用:Redirect::intended(),它可以完全满足您的需求。

    【讨论】:

    • 如果我在 routes.php 或某些控制器中进行重定向有什么不同吗?我不认为,或者?我的控制器中有这个:if(Session::has('reqUrl')){ $url = Session::get('reqUrl'); //var_dump($url); --it return http://web.com/post/23?show=full Session::forget('reqUrl'); return Redirect::to($url)->with('message', trans('a.user-successfully-logged'))->with('message-type', 'ok'); } 所以我不知道问题出在哪里。然后,在路线(用于发布)中,我只有:Route::get('post/{id}', array('before', => 'locale|auth', 'uses' => 'HomeController@getPost'));
    • @Autista_z 在哪里返回 Redirect::to() 没有区别。您是否尝试过手动设置 url,而不是为了调试而使用 Session::get()
    • 我发现我的错误,我很愚蠢。我使用 SSL 证书,但我在会话中将 url 保存为 http 而没有 https,然后如果过滤器是 if( ! Request::secure() ) {return Redirect::secure( Request::path() ); },则不会进一步传递。
    • @Autista_z,不,这发生在任何人身上。我只是想确保您知道使用 Redirect::to() 传递 GET 参数是可以的,并且问题是本地的。 :P
    【解决方案2】:

    试试这个:

    你可以像https://page.com/post/23/showFull一样传递它

    您可以通过以下方式获得它:

    Request::segment(3);
    

    【讨论】:

    • 是的,这是一个解决方案,但效率不高,因为我必须更改很多方法。应用程序在很多页面中使用 Get params,所以我宁愿做别的。
    【解决方案3】:

    为什么不重定向::back()? auth 过滤器应该能够将所有未经过身份验证的请求重定向到登录页面,然后 Redirect::back() 将用户重定向到上一个访问过的页面。

    编辑:filter,不是中间件。

    【讨论】:

    • Laravel 4.2 中没有中间件。
    【解决方案4】:

    在 Laravel 中,如果您使用的是 auth 中间件,默认情况下此功能可用,如下所示:

    Route::group(array('before' => 'auth'), function(){
    
    //authorized routes
    
    });
    

    示例

    如果用户没有登录,访问的是url“example.com/User?abc=123”,这是一个授权路由。

    然后用户将被自动重定向到登录页面。

    成功登录后,用户将自动重定向到第一次请求的 url ("example.com/User?abc=123")

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 1970-01-01
      • 2013-05-03
      • 2022-11-20
      • 2019-06-18
      • 2016-08-31
      • 1970-01-01
      • 2016-08-16
      • 2016-05-23
      相关资源
      最近更新 更多