Успешно създадох своя маршрут с помощта на 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 Helper със следния код
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.