Zend分页和路由

时间:2012-09-24 14:21:30

标签: php zend-framework

让我的网址正常运行时遇到一些麻烦。

网址如下所示:/ 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。

我该如何解决这个问题?

谢谢!

1 个答案:

答案 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_-\.]+)