ZF2 - 在分页中使用url helper保留表单中的查询

时间:2013-07-27 15:53:56

标签: zend-framework2

我是ZF2的新手,我愿意分享如何使用url helper从表单中保留参数,尤其是在分页期间。我修改了How can you add query parameters in the ZF2 url view helper

的答案

这就是我的所作所为:

AlbumController.php

// get all the query from url
$input = $form->getData();

$paginator = $this->getAlbumTable()->fetchAll();
$paginator->setCurrentPageNumber((int)$this->params()->fromQuery('page', 1));
$paginator->setItemCountPerPage(30);

// unset the 'page' query if necessary
unset($input['page']);

return array(
    'form'   => $form,
    'paginator' => $paginator,
    'routeParams' => array_filter($input) // filter empty value
);

index.phtml

echo $this->paginationControl(
    $this->paginator,
    'sliding',
    array('partial/paginator.phtml', 'Album'),
    array(
        'route' => 'album',
        'routeParams' => $routeParams
    )
);

paginator.phtml

<a href="<?php echo $this->url(
                    $this->route, // your route name
                    array(),      // any url options, e.g action
                    array('query' => $this->routeParams) // your query params
               ); 
echo (empty($this->routeParams))?  '?' : '&'; ?>
page=<?php echo $this->next; ?>">Next Page</a>

如果我错了,请提供更好的解决方案并纠正我。

谢谢

1 个答案:

答案 0 :(得分:1)

我没有比你更好的解决方案 - 我没有看到在添加一些新的查询参数时保留现有查询参数的正确方法。但以下内容比手动追加更简洁。和=字符:

paginator.phtml

<a href="<?php echo $this->url(
    $this->route, // your route name
    array(),      // any url options, e.g action
    // Merge the array with your new value(s)
    array('query' => array('page' => $this->next) + $this->routeParams)
); ?>">Next Page</a>

这也将确保如果您已经有page个参数,它将被新的覆盖。

(从技术上讲,你也可以直接使用$_GET$_POST,并且完全避免从控制器传递它,但这看起来不是很整洁)