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


How to preserve query string or session variable when redirecting in routes.php in Laravel?

我有一些附加域指向我的服务器在目录/public_html/。假设附加域是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,你会被重定向到URL red-bananas.com/red,如果你去到blue-bananas.com,你会被重定向到blue-bananas.com/blue。这很好,但我有时需要跟踪url上的查询字符串,像这样:

red-bananas.com ? tid = 123

理想情况下,我希望能够在会话中存储'123'到'tid'的值,但是如果我在

上面做session::put('tid', '123')
return redirect()->action('BananasController@red');

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

岂不是:

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
}

你实际上可以传递第二个参数(一个数组)给路由操作,它将成为参数,所以你可以这样做:

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;
    }
});