我有以下代码来匹配路由与主机名;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