zend2 маршрутизация постраничник и модуль

У меня проблемы с объектом Zend Framework 2 Router. Я безуспешно пытаюсь внедрить Zend\Paginator в пример механизма маршрутизации быстрого запуска. Позволь мне объяснить:

После выполнения быстрого старта я закончил примерно так:

'album' => array(
    'type'    => 'Segment',
    'options' => array(
        'route' => '/album[/:action][/:id]',
        'constraints' => array(
            'action' => '[a-z][a-z0-9\-]*',
            'id' => '[0-9]+'
        ),
        'defaults' => array(
            'controller' => 'Album',
            'action' => 'index'
        )
    )
)

Проблема возникает, когда я пытался реализовать пагинатор для моей страницы просмотра/индексирования. Учитывая, что мне нужен маршрутизатор типа /album[/:action][/:id][/:page], который не работает, потому что маршрутизатор назначает :page var для :id. Я удалил раздел :id, оканчивающийся чем-то вроде /album[/:action][/:page] и вызывающий в моем действии добавления/редактирования

$matches = $this->getEvent()->getRouteMatch();
$id = $matches->getParam('page');

работает без проблем, но мне нравится сохранять мнемонику. Итак, мой вопрос: возможно ли добиться этого, не создавая дубликат маршрутизатора только для того, чтобы пагинатор выглядел так, как мне нравится? я делаю что-то неправильно?


person Alwin Kesler    schedule 08.03.2013    source источник
comment
проблема в том, что вы указываете, что идентификатор и страница являются необязательными, и оба будут соответствовать целым числам. это означает, что регулярное выражение не будет знать, какое оно совпало, оно недостаточно уникально   -  person Andrew    schedule 09.03.2013


Ответы (1)


Это недостаточно уникально, как пример с маршрутом:

/album[/:action][/:id][/:page]

идентификатор и страница являются необязательными, и оба могут быть целыми числами.

если мы попытаемся сопоставить этот маршрут:

/альбом/указатель/99

99 может соответствовать идентификатору, если страница отсутствует, или также странице, идентификатор которой отсутствует. нет способа узнать, что есть что, так что это не сработает.

Вы можете добавить идентификатор, что-то вроде этого:

/album[/:action][/id/:id][/:page]

так что тогда у вас будет литерал, чтобы убедиться, что вы знаете, что это идентификатор:

/album/index/id/99 # :id = 99

или /album/index/99 # :page = 99

person Andrew    schedule 08.03.2013