下面是我在我的Zend Framework应用程序中加载的routes.xml。有两条路线,一条路线应与网址/aanbod/tekoop/huis
匹配,另一条路线应匹配/aanbod/200/gerenoveerde-woning
问题是这两个示例网址都以详细操作结束,而第一个网址应该以索引操作结束。
有人可以澄清这种路由设置有什么问题吗?
<routes>
<property_overview type="Zend_Controller_Router_Route">
<route>/aanbod/:category/:type</route>
<reqs category="(tekoop|tehuur)" />
<reqs type="[A-Za-z0-9]+" />
<defaults module="frontend" controller="property" action="index" />
</property_overview>
<property_detail type="Zend_Controller_Router_Route">
<route>/aanbod/:propertyid/:slug</route>
<reqs propertyid="[0-9]+" />
<reqs slug="(^\s)+" />
<defaults module="frontend" controller="property" action="detail" />
</property_detail>
</routes>
答案 0 :(得分:2)
请改为尝试:
<routes>
<property_overview type="Zend_Controller_Router_Route">
<route>aanbod/:category/:type</route>
<reqs category="(tekoop|tehuur)" type="[A-Za-z0-9]+" />
<defaults module="frontend" controller="property" action="index" />
</property_overview>
<property_detail type="Zend_Controller_Router_Route">
<route>aanbod/:propertyid/:slug</route>
<reqs propertyid="[0-9]+" slug="[^\s]+" />
<defaults module="frontend" controller="property" action="detail" />
</property_detail>
</routes>
我改变了什么:
[^\s]+
,这意味着'空格以外的任何字符,一次或多次',我认为这就是您的意思。答案 1 :(得分:1)
我认为您不能使用reqs
参数来帮助确定Zend_Controller_Router_Route
的路线。在您的情况下,您的路由是相同的,并且路由堆栈是LIFO,“详细信息”优先。
或许尝试使用Zend_Controller_Router_Route_Regex
代替。
我很难找到正则表达式路由器的配置方法,但在代码中它看起来像
$route = new Zend_Controller_Router_Route_Regex(
'aanbod/(tekoop|tehuur)/([A-Za-z0-9]+)',
array('controller' => 'property', 'action' => 'index', 'module' => 'frontend'),
array(1 => 'category', 2 => 'type')
);
$route = new Zend_Controller_Router_Route_Regex(
'aanbod/(\d+)/(\S+)',
array('controller' => 'property', 'action' => 'detail', 'module' => 'frontend'),
array(1 => 'propertyid', 2 => 'slug')
);