Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.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路由组,如何处理域后缀?_Laravel_Laravel 4_Laravel Routing - Fatal编程技术网

对于带有通配符的多个域的Laravel路由组,如何处理域后缀?

对于带有通配符的多个域的Laravel路由组,如何处理域后缀?,laravel,laravel-4,laravel-routing,Laravel,Laravel 4,Laravel Routing,我有3个域,在本地服务器上采用以下格式: mydomainfirst.local mydomainsecond.local mydomainthird.local 在我的routes.php文件中,我有以下内容: Route::group(array('domain' => '{domain}.{suffix}'), function() { Route::get('/', 'Primary@initialize'); }); 其思想是在我的控制器中获取$domain变量

我有3个域,在本地服务器上采用以下格式:

  • mydomainfirst.local
  • mydomainsecond.local
  • mydomainthird.local
在我的routes.php文件中,我有以下内容:

Route::group(array('domain' => '{domain}.{suffix}'), function() {

    Route::get('/', 'Primary@initialize');

});
其思想是在我的控制器中获取
$domain
变量,并从中提取第一/第二/第三部分,这很好。但是,现在我的站点已联机,此路由文件不再工作,并引发Http not found异常。过了一段时间,我发现问题在于这些域现在采用了
mydomainfirst.co.uk
格式。因为域后缀现在有两个部分,所以我似乎需要这样做:

Route::group(array('domain' => '{domain}.{a}.{b}'), function() {

    Route::get('/', 'Primary@initialize');

});
让它工作。这太愚蠢了。我怎么能告诉它只接受任何后缀?是否有我可以使用的“任何”通配符

我尝试了一些类似的方法,但对路线组不起作用

EDIT:看来这个包至少可以让我在路由组中添加一个
where
子句,但是它解决了如何设置一个通配符来匹配不确定数量的段的问题吗?我需要像这样的东西:

{domain}.{anything}
这将符合以下两个条件:

mydomainfirst.本地和mydomainfirst.合作英国


好的,首先让我说的是,的代码实际上看起来不错,应该可以工作。即使您无法通过安装使其运行,您也可以将文件和代码与您自己的服务提供商一起使用,等等

但也有一种快速而肮脏的解决方案。(实际上,这个软件包做得很相似,但看起来好多了;)

首先,以下是一条路线的操作方法:

Route::group(array('domain' => '{domain}.{tld}'), function(){
    Route::get('/', 'Primary@initialize')->where('tld', '.*');
});
因此,路由组的where条件实际上是在单个路由上设置的

当然,您不希望对该组中的每条路由都执行此操作,因此可以使用简单的foreach循环:

Route::group(array('domain' => '{domain}.{tld}'), function($group){

    Route::get('/', 'Primary@initialize');

    foreach($group->getRoutes() as $route){
        $route->where('tld', '.*');
    }
});

注意:环路需要在所有路由之后。否则它们将不会注册,因此不会返回
getRoutes()

,看起来它们可以帮助您issue@lukasgeiter谢谢,请查看编辑。您能试试
->('anywhere','.*')
在哪里工作吗?很遗憾,我甚至无法安装此软件包。看起来它与最新的Laravel路由不兼容?截图:是的,它在github上有一些未解决的问题,而且它似乎与Laravel4.2不兼容。你可以试试,这绝对是一个绝妙的作品,就像一个魅力。非常感谢!