1

私は自分のプロジェクトに select->order by $GET-variables でデータをソートすることを追加しました。しかし、ページネーターでページをナビゲートすると、もちろん、この変数は次のページに渡されません。この変数を渡してページネーターで使用する最良の方法は何ですか?

コントローラ:

public function indexAction()
{
    $sortForm = new \Records\Form\SortingForm();
    $field = 'date';
    $order = 'desc';
    $request = $this->getRequest();

    if ($request->isGet()){
        $sortForm->setValidationGroup(array('field', 'order'));
        $sortData = $request->getQuery()->toArray();
        $sortForm->setData($sortData);

        if($sortForm->isValid()) {
            $sortForm->getData($sortData);
            $field = (string) $this->params()->fromQuery('field', 'date');
            $order = (string) $this->params()->fromQuery('order', 'desc');
        }
    }
    $query = $this->getRecordsTable()->fetchAll($field, $order);

    $paginator = new Paginator\Paginator(new Paginator\Adapter\Iterator($query));
    $paginator->setCurrentPageNumber($this->params()->fromRoute('page', 1));
    $paginator->setItemCountPerPage(25);

    $vm = new ViewModel(array('records' => $paginator));

モデル:

public function fetchAll($field, $order)
    {
        $this->field = $field;
        $this->order = $order;
        $resultSet = $this->tableGateway->select(function (Select $select) {
        $select->columns(array('date', 'name', 'email', 'homepage', 'text', 'image', 'file'));
        $select->order($this->field.' '.$this->order);        
        });
        $resultSet->buffer();
        $resultSet->next();

        return $resultSet;
    }

形:

public function __construct($name = null)
    {
        parent::__construct('records');
        $this->setAttribute('method', 'get');

        $this->add(array(
            'name' => 'field',
            'required' => false,
            'type'  => 'Zend\Form\Element\Select',
            'options' => array(
                'label' => 'Sort by: ',
                'value_options' => array(
                    'date' => 'Date', 
                    'email' => 'E-mail', 
                    'name' => 'Username',
            ),
        )));
        $this->add(array(
            'name' => 'order',
            'required' => false,
            'type'  => 'Zend\Form\Element\Select',
            'options' => array(
                'value_options' => array(
                    'asc' => 'ascending', 
                    'desc' => 'descending', 
            ),
        )));
        $this->add(array(
            'name' => 'submit',
            'attributes' => array(
                'type'  => 'submit',
                'value' => 'Go',
                'id' => 'submitbutton',
            ),
        ));
    }

ページネーター ビュー:

<!-- Numbered page links -->
<?php foreach ($this->pagesInRange as $page): ?>
  <?php if ($page != $this->current): ?>
    <a href="<?php echo $this->url($this->route, array('page' => $page)); ?>">
        <?php echo $page; ?>
    </a> |
  <?php else: ?>
    <?php echo $page; ?> |
  <?php endif; ?>
<?php endforeach; ?>

もう 1 つ: get-variables を渡すと、クエリ文字列はhttp://guest-book.me/page/7?field=date&order=asc &submit=Goのようになります。

ご協力ありがとう御座います!:)

4

2 に答える 2