ZF2分页从路线传递价值

时间:2017-01-02 22:11:21

标签: php zend-framework pagination

在我的Zend Framework项目中,我有一个“基础资产”模块。在此我试图创建一个符合以下路线的分页:

'route'    => '/video/search[/:search][/:page_reference]',

搜索值的目的是如果用户点击创建的任何“下一页”链接,将在数据库上运行相同的查询。

page_reference 的值工作正常。 搜索的价值是我不确定如何填充分页:

<li>
    <a href="<?php echo $this->url(
        $this->route,
        ['page_reference' => $this->previous , 'search' => $this->search]
    ); ?>"> << </a>
</li>

以下尝试未获成功:

$this->search
$this->params()->fromRoute('search')

使用

从视图中调用分页
{{ paginationControl(result, 'sliding', ['actsministries/asset/searchpaginator', 'AMBase']) }}

我应该在服务中设置搜索值吗?

1 个答案:

答案 0 :(得分:1)

1 - 创建一个视图助手:

use Zend\View\Helper\AbstractHelper;

class Requesthelper extends AbstractHelper
{
    protected $request;

    //get Request
    public function setRequest($request)
    {
        $this->request = $request;    
    }

    public function getRequest()
    {
        return $this->request;    
    }

    public function __invoke()
    {
        return $this->getRequest()->getServer()->get('QUERY_STRING');     
    }
}

2 - Module.php

public function getViewHelperConfig()
    {
        return array(
            'invokables' => array(
            ),

            'factories' => array(
                'Requesthelper' => function($sm){
                   $helper = new YourModule\View\Helper\Requesthelper; \\the path to creatd view helper
                   $request = $sm->getServiceLocator()->get('Request');
                   $helper->setRequest($request);
                   return $helper;
                }   
           ),
        );   
    }

3 - searchpaginator.phtml:

    <?php 
$parameterGet = $this->Requesthelper();
if ($parameterGet != ""){
    $aParams = explode("&", $parameterGet);
    foreach($aParams as $key => $value){
        if(strpos($value, "page_reference=") !== false){
            unset($aParams[$key]);
        }
    }

    $parameterGet = implode("&", $aParams);

    if($parameterGet != '')
        $parameterGet = "&".$parameterGet;
}

?>
<?php if ($this->pageCount):?>
     <div>
         <ul class="pagination">
             <!-- Previous page link -->
             <?php if (isset($this->previous)): ?>
                 <li>
                     <a href="<?php echo $this->url($this->route); ?>?page_reference=<?php echo $this->previous.$parameterGet; ?>">
                         &lt;&lt;
                     </a>
                 </li>
             <?php else: ?>
                 <li class="disabled">
                     <a href="#">
                         &lt;&lt;
                     </a>
                 </li>
             <?php endif; ?>

             <!-- Numbered page links -->
             <?php foreach ($this->pagesInRange as $page): ?>
                 <?php if ($page != $this->current): ?>
                     <li>
                         <a href="<?php echo $this->url($this->route);?>?page_reference=<?php echo $page.$parameterGet; ?>">
                             <?php echo $page; ?>
                         </a>
                     </li>
                 <?php else: ?>
                     <li class="active">
                         <a href="#"><?php echo $page; ?></a>
                     </li>
                 <?php endif; ?>
             <?php endforeach; ?>

             <!-- Next page link -->
             <?php if (isset($this->next)): ?>
                 <li>
                     <a href="<?php echo $this->url($this->route); ?>?page_reference=<?php echo $this->next.$parameterGet; ?>">
                         &gt;&gt;
                     </a>
                 </li>
             <?php else: ?>
                 <li class="disabled">
                     <a href="#">
                         &gt;&gt;
                     </a>
                 </li>
             <?php endif; ?>
         </ul>
     </div>
 <?php endif; ?>

4 - index.phtml

<?php
 // add at the end of the file after the table
 echo $this->paginationControl(
     // the paginator object
     $this->paginator,
     // the scrolling style
     'sliding',
     // the partial to use to render the control
     'partial/searchpaginator.phtml',
     // the route to link to when a user clicks a control link
     array(
         'route' => '/video/search'
     )
 );
?>

我希望你找到的是