Zend Framework paginator强制$ _GET params用法

时间:2010-09-27 12:58:40

标签: zend-framework routing

是否可以使用带有$ _GET参数的paginator?

例如我有这样的路线:

$router->addRoute('ajax_gallery',
new Routes_Categories(
'/:lang/:category/age/:dep/:cat/:towns',
array(
"page" => 1,
"dep" => 0,
"cat" => 0,
"towns" => 0
),
array(
"dep" => "[0-9]+",
"cat" => "[0-9]+"
)

));

我正在通过ajax提出这样的请求:

http://localhost/en/gallery?dep=9&cat=27&towns=1

但是从结果返回的链接没有?dep = 9& cat = 27& towns = 1

如何强制zend paginator在分页链接生成中使用传递的$ _GET参数?

所以返回的链接是:

http://localhost/en/gallery/2?dep=9&cat=27&towns=1
http://localhost/en/gallery/3?dep=9&cat=27&towns=1
http://localhost/en/gallery/4?dep=9&cat=27&towns=1

等...

甚至

http://localhost/en/gallery/2/9/27/1
http://localhost/en/gallery/3/9/27/1
http://localhost/en/gallery/4/9/27/1

就像他们在路线内定义一样 等...

谢谢

1 个答案:

答案 0 :(得分:1)

视图URL帮助器将始终输出params作为URL的一部分(由正斜杠分隔),据我所知,它不支持GET参数格式。

我不知道Routes_Categories类的作用,但是使用默认的ZF路由类试试这个:

$route = new Zend_Controller_Router_Route(
    '/:lang/:category/:age/:dep/:cat/:towns/*',
    array(
        "dep" => 0,
        "cat" => 0,
        "towns" => 0
    ),
    array(
        "dep" => "[0-9]+",
        "cat" => "[0-9]+"
    )
);
$router->addRoute('ajax_gallery', $route);

*支持路线后的任何其他命名参数。以上假定lang,category和age是必需的,dep,cat和towns是可选的。请记住,如果你想设置cat,你必须设置dep,否则路由会混淆哪个变量是什么。

在您的控制器中通过以下命令访问页面参数,默认值为1。

$page = $this->_getParam('page', 1);

通过AJAX访问网址:http://localhost/en/gallery/2/9/27/1

如果您需要页面参数,请使用命名参数:http://localhost/en/gallery/2/9/27/1/page/2

要使此路由在您的分页中起作用,您需要更新分页器视图控件以使用正确的路径。请参阅:http://framework.zend.com/manual/en/zend.paginator.usage.html#zend.paginator.usage.rendering.example-controls

查找输出URL的代码,并将路由名称添加到URL视图助手。所以替换这样的代码:

<?php echo $this->url(array('page' => $this->previous)); ?>

使用:

<?php echo $this->url(array('page' => $this->previous), 'ajax_gallery'); ?>