Symfony1 sfDoctrinePager分页的问题

Symfony1 sfDoctrinePager分页的问题,symfony1,doctrine,pagination,Symfony1,Doctrine,Pagination,我正在模块中使用sfDoctrinePager。我根据一个或多个条件搜索表。第一次显示的结果是正确的,但之后如果我单击第2页或更多页,它会再次显示整个结果集,我的搜索结果集将丢失 我第一次面对这个问题,尽管我已经使用sfDoctrinePager很久了 我从搜索表单中获取此数组 ( [field_type] => log_type [field_value] => ABC [is_active] => on ) 我将此数组变量发送到我的模型: $get

我正在模块中使用sfDoctrinePager。我根据一个或多个条件搜索表。第一次显示的结果是正确的,但之后如果我单击第2页或更多页,它会再次显示整个结果集,我的搜索结果集将丢失

我第一次面对这个问题,尽管我已经使用sfDoctrinePager很久了

我从搜索表单中获取此数组

(
    [field_type] => log_type
    [field_value] => ABC
    [is_active] => on
)
我将此数组变量发送到我的模型:

$getQuery = $objMgr->getSearchQuery($request->getPostParameters());
**在模型中运行的查询是:

public function getSearchQuery($arrSearchValues)
{
  $q = Doctrine_Query::create()
          ->select('u.*')
          ->from('SomsConfigValues u');
          ->where('u.deleted_at IS NULL');

  if(isset($arrSearchValues['is_active']) && $arrSearchValues['is_active'] == 'on'){
    $q->where('u.is_active = ?', 1);
  }      
  if(isset($arrSearchValues['field_type']) && $arrSearchValues['field_type'] != ""){
    $revertChg = ucwords(str_replace("_", " ", $arrSearchValues['field_type']));
    $q->andWhere('u.field_type = ?', $revertChg);
  }
  if(isset($arrSearchValues['field_value']) && $arrSearchValues['field_value'] != ''){
    $q->andWhere('u.field_type = ?', $arrSearchValues['field_value']);
  }
  return $q;
}
第一次我得到了完美的搜索结果,但第二次(当我点击第2页时,它给出了整个结果集)

我的行动是:

public function executeIndex(sfWebRequest $request)
{
$objMgr = AdminFactory::adminObject();
$getQuerys = $objMgr->getSearchQuery($request->getPostParameters());

$this->config_values = $getQuerys;     
$this->pager = new sfDoctrinePager('configValues',     sfConfig::get('app_max_row_display'));    
$this->pager->setQuery($this->config_values);
$this->pager->setPage($request->getParameter('page', 1));
$this->pager->init();
}
我使用此分页的模板是:

<div class="grid_footer">
        <div style="padding:5px;">
          <?php if(count($pager->getLinks())) : ?>
          <div class="tableControl">
            <div class="pagination_inner">
              <?php if(!$pager->isFirstPage()){ ?>
                <?php echo link_to1(image_tag('/images/first.png'), 'configValues/index?page='.$pager->getFirstPage()) ?>
                <?php echo link_to1(image_tag('/images/previous.png'), 'configValues/index?page='.$pager->getPreviousPage()) ?>
              <?php } ?>
              <div class="numbers">
                <?php if ($pager->haveToPaginate()): ?>
                  <?php $links = $pager->getLinks(); foreach ($links as $page): ?>
                    <?php echo ($page == $pager->getPage()) ? $page : link_to($page, 'configValues/index?page='.$page) ?>
                  <?php endforeach ?>
                <?php endif ?>
              </div>
              <?php if(!$pager->isLastPage()){    ?>
                <?php echo link_to1(image_tag('/images/next.png'), 'configValues/index?page='.$pager->getNextPage()) ?>
                <?php echo link_to1(image_tag('/images/last.png'), 'configValues/index?page='.$pager->getLastPage()) ?>
              <?php  } ?>
            </div>
          </div>
          <?php echo $pager->getNbResults() ?> results (page <?php echo $pager->getPage(); ?>/<?php echo count($pager->getLinks()); ?>)
          <?php endif; ?>
        </div>
      </div>

结果(第页)

我遇到了完全相同的问题。我发现解决这个问题的唯一方法是,正如您所说的,存储查询。不要使用会话,而是在用户中创建一个属性来存储该会话

在动作课上,放一些像

$this->getUser()->setAttribute('searchQuery', $getQuery);
此值在整个会话中持续存在,因此您可以使用例如

$storedQuery = $this->getUser()->getAttribute('searchQuery');

您可以通过dev工具栏上的config项查看用户属性。

您可以显示您的操作,以及显示您在哪里创建下一页
链接的视图吗?
链接…我已经添加了我的操作代码和模板分页代码。我想我必须将查询存储在会话中,以便反复检索。这是现在看来唯一可行的方法。。。。任何建议。