如何在Laravel中的routes.php中重定向时保留查询字符串或会话变量?

时间:2016-08-26 20:29:52

标签: php laravel-5

我在目录/ public_html /上有一些指向我服务器的插件域。假设addon域名为red-bananas.com和blue-bananas.com,当有人加载该域名时,我希望它指向我控制器中的特定操作。所以我在routes.php文件的底部有这个代码:

Route::get('red', 'BananasController@red');
Route::get('blue', 'BananasController@blue'); 
Route::any('/', function()
{

    switch( Request::getHost() ){
        case 'red-bananas.com':
            return redirect()->action('BananasController@red');
            break;
        case 'blue-bananas.com':
            return redirect()->action('BananasController@blue');
            break;

    }
});

我注意到你要去red-bananas.com,你会被重定向到网址red-bananas.com/red,如果你去blue-bananas.com,你会被重定向到blue-bananas.com /蓝色。这很好,但我有时会在我的网址上找到我需要的跟踪查询字符串,如下所示:

red-bananas.com?tid=123

理想情况下,我希望能够在会话中存储'123'到'tid'的值,但如果我在上面做Session :: put('tid','123')

return redirect()->action('BananasController@red');

它不起作用 - 会话中没有任何内容存储,跟踪数据也会丢失。如何保留跟踪数据?我需要有人能够加载URL red-bananas.com?tid=123并在我的BananasController中触发红色功能,我可以访问tid的值。

2 个答案:

答案 0 :(得分:0)

不是吗:

switch( Request::getHost() ){
    case 'red-bananas.com':
        Route::get('/{tid?}', ['as' => 'bananas.red', 'uses' => 'BananasController@red']);
        break;
    // ... repeat for other cases
}

然后在你的BananasController中:

public function red($tid = null)
{
    // ... whatever
}

答案 1 :(得分:0)

您实际上可以wrapper这将成为参数,因此您可以执行以下操作:

Route::get('red', 'BananasController@red');
Route::get('blue', 'BananasController@blue'); 
Route::any('/', function()
{

    switch( Request::getHost() ){
        case 'red-bananas.com':
            return redirect()->action('BananasController@red', request()->all());
            break;
        case 'blue-bananas.com':
            return redirect()->action('BananasController@blue', request()->all());
            break;

    }
});