Конфигурация Zend Route XML не работает должным образом - PullRequest
0 голосов
/ 17 августа 2011

Ниже приведен мой rout.xml, который загружается в мое приложение Zend Framework.Существует два маршрута, один из которых должен соответствовать URL /aanbod/tekoop/huis, а другой должен соответствовать /aanbod/200/gerenoveerde-woning

Проблема заключается в том, что оба приведенных в качестве примера 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>

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Попробуйте вместо этого:

<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' - добавьте различные требования в качестве атрибутов этого.Это основная причина, по которой ваши маршруты не работали, так как только один из запросов использовался на каждом маршруте
  • Удалите начальный слеш - это не имеет смысла
  • Изменен шаблон слагна [^\s]+, что означает «любой символ, кроме пробела, один или несколько раз», я думаю, это то, что вы имели в виду.
1 голос
/ 17 августа 2011

Не думаю, что вы можете использовать параметр reqs, чтобы помочь определить маршрут для Zend_Controller_Router_Route.В вашем случае ваши маршруты идентичны, и поскольку стек маршрутов равен LIFO, «детализация» имеет приоритет.

Возможно, вместо этого попробуйте использовать Zend_Controller_Router_Route_Regex.

Мне трудно найти метод настройки для маршрутизатора 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')
);
...