1

让我的 URL 正常工作有点麻烦。

URL 如下所示:/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/ 部分。如果我添加它:

'messages/from/:user_id/page/:page'

然后它会中断并且 user_id 参数始终为空。

我怎样才能解决这个问题?

谢谢!

4

1 回答 1

2

由于您希望能够/page/从 URL 中删除部分,因此您必须定义两个单独的路由,一个匹配用户 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_-\.]+).

于 2012-09-24T19:24:15.080 回答