ZF2 分页 从路由传递值



在我的Zend框架项目中,我有一个"基础资产"模块。 在此范围内,我正在尝试创建一个与以下路线匹配的分页:

'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 - 创建一个视图助手:

use ZendViewHelperAbstractHelper;
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 - 模块.php

public function getViewHelperConfig()
    {
        return array(
            'invokables' => array(
            ),
            'factories' => array(
                'Requesthelper' => function($sm){
                   $helper = new YourModuleViewHelperRequesthelper; \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'
     )
 );
?>

我希望这就是你要找的

最新更新