我有一些附加域指向我的服务器在目录/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;
}
});