Я успешно создал свой маршрут с помощью Regex. У меня есть несколько необязательных параметров в моем маршруте, которые я не хочу отображать в помощнике URL, если пользователь не указал их. Как я могу это сделать?
Это то, что у меня есть на данный момент
$route = new Zend_Controller_Router_Route_Regex(
'([a-zA-Z-_0-9-]+)-Widgets(?:/page/(\d+))?(?:/limit/(\d+))',
array(
'controller' => 'widget',
'action' => 'list',
),
array(
1 => 'color',
2 => 'page',
3 => 'limit'
),
'%s-Widgets/'
);
$router->addRoute('color_widgets', $route);
Затем я вызываю вспомогательную функцию URL со следующим кодом
echo $this->url(array('page' => $page), 'color_widgets', false);
Это приводит к /Blue-Widgets/ и не отправляет страницу по URL-адресу. Я могу исправить это, изменив реверс в маршрутизаторе.
$route = new Zend_Controller_Router_Route_Regex(
'([a-zA-Z-_0-9-]+)-Widgets(?:/page/(\d+))?(?:/limit/(\d+))',
array(
'controller' => 'widget',
'action' => 'list',
'page' => 1
),
array(
1 => 'color',
2 => 'page',
3 => 'limit'
),
'%s-Widgets/page/%d'
);
Однако это не решает мою проблему, скажем, у меня есть URL
/Blue-Widgets/page/1/limit/10 Ограничение не отображается, опять же, я могу исправить это с помощью следующего
$route = new Zend_Controller_Router_Route_Regex(
'([a-zA-Z-_0-9-]+)-Widgets(?:/page/(\d+))?(?:/limit/(\d+))',
array(
'controller' => 'widget',
'action' => 'list',
'page' => 1,
'limit' => 10
),
array(
1 => 'color',
2 => 'page',
3 => 'limit'
),
'%s-Widgets/page/%d/limit/%d'
);
Проблема в том, что пользователь находится в /Blue-Widgets/, и я хочу перевести его на следующую страницу Blue Widgets со следующим кодом.
echo $this->url(array('page' => $page), 'color_widgets', false);
На самом деле они попадают в /Blue-Widgets/page/2/limit/10.
Когда я действительно хочу взять их в /Blue-Widgets/page/2
Как я могу добиться этого с помощью Zend Framework.