Yom*_*omY 9 subdomain dns routing laravel laravel-5
在laravel 5应用程序中,我试图在不知道域的情况下为子域创建路由.
Route::group(array('domain' => 'subdomain.domain.tld'), function() {
Route::get('/', 'testController@getTest2');
});
Route::get('/', 'testController@getTest1');
Run Code Online (Sandbox Code Playgroud)
这种路由工作,我得到了subTmain的getTest2()和没有子域调用的getTest1().
现在,我希望这可以使用通配符域,但不向控制器发送参数,因此dev环境中的应用程序可以在任何域上.(我也考虑使用.env存储域名,但这对于路由来说似乎太麻烦了)
我试过了
array('domain' => 'subdomain.{domain}.{tld}')
Run Code Online (Sandbox Code Playgroud)
这需要控制器方法的参数.我试过了
array('domain' => 'subdomain.{domain?}.{tld?}')
Run Code Online (Sandbox Code Playgroud)
这不需要参数,但无论如何都要发送它们,所以我的实际路由参数会被移动.
我也看过http://laravel-tricks.com/tricks/dynamic-subdomain-routing,但我不喜欢在过滤器中处理我的域名的想法.
有没有其他方法可以在处理路由组后忽略通配符域?
我发现这样做的最好方法是创建一个中间件,从您的路线中删除特定参数.例如,在您的情况下:
class Subdomain {
public function handle($request, Closure $next)
{
$route = $request->route();
$domain = $route->parameter('domain');
$tld = $route->parameter('tld');
//do something with your params
$route->forgetParameter('domain');
$route->forgetParameter('tld');
return $next($request);
}
}
//inside your Kernel.php, make sure to register the middleware
protected $routeMiddleware = [
'subdomain' => \App\Http\Middleware\Subdomain::class,
];
Route::group(['middleware' => 'subdomain', 'domain' => 'subdomain.{domain}.{tld}'], function () {
Route::get('/', function () {
dd(func_get_args()); //no args, because it was removed in the middleware
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6896 次 |
| 最近记录: |