0

下面是我在 Zend Framework 应用程序中加载的 routes.xml。有两种路由,一个应该匹配 url /aanbod/tekoop/huis,另一个应该匹配/aanbod/200/gerenoveerde-woning

问题是这两个示例 url 都以 detail 操作结束,而第一个 URL 应该以 index 操作结束。

谁能澄清这个路由设置有什么问题?

<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>
4

2 回答 2

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”元素——添加不同的需求作为它的属性。这是您的路线不起作用的主要原因,因为每条路线中只使用了一个请求
  • 删除初始斜线 - 这没有用
  • 将 slug 模式更改为[^\s]+“除空格以外的任何字符,一次或多次”,我认为这就是您的意思。
于 2011-08-17T14:23:23.753 回答
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')
);
于 2011-08-17T13:33:18.647 回答