3

私はZF2が初めてで、特にページネーション中にurlヘルパーを使用してフォームからパラメーターを保持する方法を喜んで共有します。ZF2 URLビューヘルパーにクエリパラメーターを追加するにはどうすればよいですかの回答を変更します

これが私がすることです:

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>

より良い解決策を提供し、間違っている場合は修正してください。

ありがとうございました

4

1 に答える 1

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、新しいパラメーターによって上書きされます。

(技術的には、$_GETor$_POSTを直接使用して、コントローラーから渡さないようにすることもできますが、それはあまりうまくいきません)

于 2013-08-26T12:24:17.307 に答える