2014-12-28 43 views
1

我有3個域其中,我的本地服務器上,採取以下格式:Laravel使用通配符爲多個域設置路由組,如何處理域後綴?

  • mydomainfirst.local
  • mydomainsecond.local
  • mydomainthird.local

在我的routes.php文件文件,我有以下幾種:

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

    Route::get('/', '[email protected]'); 

}); 

這個想法是採取$domain變量在我的控制器中,並從中提取第一/第二/第三部分,它工作正常。但是,現在我的網站已聯機,此路由文件不再有效並引發Http未發現的異常。過了一段時間,我發現問題是這些域現在採用格式mydomainfirst.co.uk。因爲現在有2個部分的域名後綴,似乎我需要這樣做:

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

    Route::get('/', '[email protected]'); 

}); 

爲了讓它工作。這是愚蠢的。我怎麼能告訴它只接受任何後綴?是否有我可以使用的「任何」通配符?

我試過一些東西,如this answer,但它不適用於路由組。

編輯:看來Enhanced Router方案將至少使我增加一個where子句的路由組,但它解決了如何設置一個通配符將匹配段數量不確定的問題?我需要這樣的東西:

{domain}.{anything} 

這將同時匹配:

mydomainfirst。 本地AND mydomainfirst。 co英國

+0

看起來像[此包](https://github.com/jasonlewis/enhanced-router)可以幫助您解決問題 – lukasgeiter

+0

@lukasgeiter謝謝,請參閱編輯。 – Inigo

+0

如果' - > where('anything','。*')'有效嗎? – lukasgeiter

回答

2

好的,讓我先說this package代碼實際上看起來不錯,應該工作。即使你不能通過安裝來運行它,你也可以將文件和代碼與你自己的服務提供商等進行通信。

但也有一種快速和骯髒的解決方案。 (其實包確實是非常相似,但它看起來要好很多;))

首先,這裏是你如何能做到這一點的一個途徑:

Route::group(array('domain' => '{domain}.{tld}'), function(){ 
    Route::get('/', '[email protected]')->where('tld', '.*'); 
}); 

所以where條件的路線集團實際在個人路線上設置。

你當然不希望該組內的每個路徑做到這一點,所以你可以用一個簡單的foreach循環:

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

    Route::get('/', '[email protected]'); 

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

注:循環需要來的所有路由後。否則,他們將不會註冊,因此不會返回getRoutes()

+0

這絕對是一個輝煌的作品。非常感謝! – Inigo

+0

不客氣。我也學到了一些東西;) – lukasgeiter