我有以下代碼來匹配路由與主機名;ZF2主機名匹配彙編url和404
'router' => [
'router_class' => 'Zend\Mvc\Router\Http\TranslatorAwareTreeRouteStack',
'routes' => [
'website' => [
'type' => 'hostname',
'may_terminate' => true,
'options' => [
'route' => ':locale.domain.:tld',
'constraints' => [
'language' => '(nl|en)',
'tld' => '(dev|org)',
],
],
]
],
],
和一些路線來匹配uri。
所以在開發我可以有像en.domain.dev
和nl.domain.dev
路線。該航線的翻譯也用得好好的,但隨後我的「問題」出現
1.組裝網址
對於每一個網址我現在需要的locale
和tld
變量。要做到這一點,我做<?= $this->url('website/languages', [], true); ?>
,但這使它變得一團糟。因爲我只想使用當前路線的TLD和區域設置。
所以我提出瞭解決方案來擴展URL視圖助手。當沒有設置路徑匹配時,設置參數locale
和tld
。這工作1'小'的問題,請參閱2.但想知道是否有一個解決這個問題的解決方案。
2. 404帕加
在1我使用當前路由匹配,以獲得locale
/tld
組裝URL的這一切工作,除了404頁。顯然,因爲沒有路線匹配。
我開始挖周圍,當我發現路由器(從service locator
)。我試圖得到website
的路線,它只返回Zend\Mvc\Router\Http\Part
。 protected $route
是無法訪問的Zend\Mvc\Router\Http\Hostname
。所以沒有這樣的運氣。
我得到主機名路由的唯一方法是通過構建它我自己,我真的不想這樣做。
所以問題是你如何輕鬆地重用主機名參數,並獲得404頁上的主機名參數?
我知道,例如test.domain.test將不匹配主機名,並會提供一個破損的主機名,但這是Nginx的問題。所以Nginx會確保主機名永遠是正確的
不知道如果我理解正確的你。你可以寫一個視圖助手,在其中注入參數。你可以在404視圖腳本中使用助手。 – Ronnie 2014-09-26 14:57:45
我可以但參數是基於主機名,在場景1中,我每次都需要它們在我的url viewhelper中。在第二種情況下,問題是沒有路線匹配 – MKroeders 2014-09-26 15:46:17