Zend Route XML配置无法按预期工作

时间:2011-08-17 12:53:04

标签: zend-framework zend-route

下面是我在我的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>

2 个答案:

答案 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>

我改变了什么:

  • 您应该只有一个'reqs'元素 - 添加不同的要求作为其属性。这是您的路线无法正常工作的主要原因,因为每条路线中只使用了一个需求
  • 删除最初的斜杠 - 这没有任何意义
  • 将slu pattern模式更改为[^\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')
);