让我的网址正常运行时遇到一些麻烦。
网址如下所示:/ messages / from / 1 / page / 5
我的路线看起来像这样
$router->addRoute('messages-from',
new Zend_Controller_Router_Route('messages/from/:user_id/:page', array(
'controller' => 'messages',
'action' => 'from',
'page' => 1
))
);
哪个工作正常。但URL缺少/ page / part。如果我将其添加到:
'messages/from/:user_id/page/:page'
然后它中断并且user_id参数始终为null。
我该如何解决这个问题?
谢谢!
答案 0 :(得分:2)
由于您希望能够从URL中取消/page/
部分,因此您必须定义两个单独的路由,一个匹配用户ID和页面参数,另一个路径仅匹配用户ID该页面使路由器可以在两种情况下找到路由匹配。
或者,这种基于regex
的路线在两种情况下都有效。
$route = new Zend_Controller_Router_Route_Regex(
'messages/from/(\d+)(?:/page/(\d+)/?)?',
array(
'controller' => 'messages',
'action' => 'from',
'page' => 1,
),
array(
1 => 'from',
2 => 'page',
)
);
$router->addRoute('messages-from', $route);
根据您提供的URL,我在正则表达式中假设from
参数是一个整数。如果您可以传递字符串,则需要将(\d+)
模式更改为更合适的模式,例如([\w\d_-\.]+)
。