Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
任意域上的Laravel 5子域路由_Laravel_Dns_Routing_Laravel 5_Subdomain - Fatal编程技术网

任意域上的Laravel 5子域路由

任意域上的Laravel 5子域路由,laravel,dns,routing,laravel-5,subdomain,Laravel,Dns,Routing,Laravel 5,Subdomain,在Laravel5应用程序中,我试图为子域创建一条路由 不知道域名 Route::group(array('domain' => 'subdomain.domain.tld'), function() { Route::get('/', 'testController@getTest2'); }); Route::get('/', 'testController@getTest1'); 这种路由是有效的,我为子域调用getTest2(),为无子域调用getTest1() 现在,我

在Laravel5应用程序中,我试图为子域创建一条路由 不知道域名

Route::group(array('domain' => 'subdomain.domain.tld'), function() {
    Route::get('/', 'testController@getTest2');
});
Route::get('/', 'testController@getTest1');
这种路由是有效的,我为子域调用getTest2(),为无子域调用getTest1()

现在,我想让它与通配符域一起工作,但不向控制器发送参数, 因此,开发环境中的应用程序可以位于任何域上。 (我也考虑过使用.env来存储域,但这对于仅仅路由来说似乎太麻烦了)

我试过了

array('domain' => 'subdomain.{domain}.{tld}')
array('domain' => 'subdomain.{domain?}.{tld?}')
这需要控制器方法上的参数。 我已经试过了

array('domain' => 'subdomain.{domain}.{tld}')
array('domain' => 'subdomain.{domain?}.{tld?}')
它不需要参数,但无论如何都会发送它们,所以我的实际路线参数会发生偏移

我也见过,但我不喜欢在过滤器中处理我的域


处理路由组后,是否有其他方法可以忽略通配符域?

检查此选项,这可能有助于回答您的问题:


我发现最好的方法是创建一个中间件,从路由中删除特定参数。例如,在您的情况下:

类子域{
公共函数句柄($request,Closure$next)
{
$route=$request->route();
$domain=$route->parameter('domain');
$tld=$route->parameter('tld');
//对你的情人做点什么
$route->forgetParameter('domain');
$route->forgetParameter('tld');
返回$next($request);
}
}
//在Kernel.php中,确保注册中间件
受保护的$RouteMiddle软件=[
“子域”=>\App\Http\Middleware\subdomain::class,
];
路由::组(['middleware'=>'subdomain','domain'=>'subdomain.{domain}.{tld}'],函数(){
路由::get(“/”,函数(){
dd(func_get_args());//没有args,因为它已在中间件中删除
});
});

就为了让你知道你能做什么

'domain' => '{subdomain}.{domain}.{tld}' 
这会将a.domain.com和b.domain.com路由到所有相同的路由/相同的控制器,您可以在该控制器内执行逻辑

我会使用上面的suggjested这样的中间件来从请求中删除域和tld,否则每个建模都会像这样

public function myMethod($subdomain, $domain, $tld, $id)
假设您的路线需要$id或任何其他路线参数


另一件您可能感兴趣的事情是显式表单模型绑定。

我已经阅读了文档,参数中的正则表达式将影响作为参数的内容,但不会改变控制器获取它们的方式。我对此也非常感兴趣。我的laravel后端提供了一个api,我对它进行了配置,以便api在api.domain下可用,而其他一些东西,如不同子域下与oauth相关的东西。由于我正在使用homestead进行本地开发,服务器显然将位于另一个域上,我希望有一种方法可以在我的应用程序中不硬编码域,直到找到更好的解决方案,我已经在routes文件中直接添加了手动域检查,方法与用户mazon在此处回答的类似:有趣的方法。我喜欢它,并可能使用它来操纵路由中的参数。然而,这并不能解决问题。这样,对于所有子域,“/”的路由函数仍然相同。其思想是指向基于哪个子域被调用的不同函数。x、 sub.tld>功能1,y.sub.tld>功能2。谢谢你的新想法。