Php 如何在symfony2中显示并同时搜索?

Php 如何在symfony2中显示并同时搜索?,php,symfony,Php,Symfony,我正在使用symfony2进行一个项目。我有一个搜索功能、分页功能,同时在一个存储库功能中显示所有事务。一切正常,直到我发现,每当我转到网站的其他选项卡并再次回到我的跟踪页面时,它都会返回“未找到结果”,而不是显示所有交易。但是,当我单击搜索按钮时,它会再次显示所有事务,但当我单击分页按钮时,它会再次返回未找到的结果。我认为我的代码中确实存在冲突。我不知道它在哪里。我希望有人能帮助我 以下是我的存储库代码: public function getAllTransaction($rNumber,$

我正在使用symfony2进行一个项目。我有一个搜索功能、分页功能,同时在一个存储库功能中显示所有事务。一切正常,直到我发现,每当我转到网站的其他选项卡并再次回到我的跟踪页面时,它都会返回“未找到结果”,而不是显示所有交易。但是,当我单击搜索按钮时,它会再次显示所有事务,但当我单击分页按钮时,它会再次返回未找到的结果。我认为我的代码中确实存在冲突。我不知道它在哪里。我希望有人能帮助我

以下是我的存储库代码:

public function getAllTransaction($rNumber,$startDate,$endDate,$gNumber,$senderId,$receiverId,$docType,$direction,$page = 1, $limit = 10) {
         $em = $this->getEntityManager();
         $query = $em->createQuery(
           'SELECT partial a.{supplierTransactionDetailId, rNumber, pNumber, invNumber, anNumber, adNumber, amount}, 
            partial b.{supplierTransactionId, transactionDate, senderId, receiverId, isaNumber, gsNumber, fileName}, 
            partial c.{supplierDocTypeId, docType, direction} 
            FROM SupplierBundle:SupplierTransactionDetail a 
            JOIN a.supplierTransaction b 
            JOIN b.supplierDocType c
            WHERE (a.rNumber LIKE :rNumber OR a.pNumber LIKE :rNumber 
                  OR a.invNumber LIKE :rNumber 
                  OR a.anNumber LIKE :rNumber 
                  OR a.adNumber LIKE :rNumber )
            AND ((:startDate = \'\' OR :endDate = \'\') OR 
          (b.transactionDate BETWEEN :startDate AND :endDate))
            AND b.gsNumber LIKE :gsNumber
            AND b.senderId LIKE :senderId
            AND b.receiverId LIKE :receiverId
            AND c.docType LIKE :docType
            AND c.direction LIKE :direction


            ORDER BY b.transactionDate desc'
          )
          ->setParameter('rNumber', $rNumber)
          ->setParameter('startDate', $startDate)
          ->setParameter('endDate', $endDate)
          ->setParameter('gsNumber', $gsNumber)
          ->setParameter('senderId', $senderId)
          ->setParameter('receiverId' , $receiverId)
          ->setParameter('docType',$docType)
          ->setParameter('direction', $direction)
          ->setFirstResult(($page - 1) *$limit )
          ->setMaxResults($limit);

         $paginator = new Paginator ($query, $fetchJoinCollection = false );
         $paginator->setUseOutputWalkers(false);

         return $paginator;
      }
更新

supplier_tracking:
    pattern: /track/{page}
    defaults: { _controller: "SupplierBundle:Supplier:track" , page: 1 }
控制器

public function trackAction(Request $request,$page){
        $rNumber = $request->query->get('rNumber');
        $gsNumber = $request->query->get('gsNumber');
        $senderId = $request->query->get('senderId');
        $receiverId = $request->query->get('receiverId');
        $docType = $request->query->get('docType');
        $direction = $request->query->get('direction');
        $startDate = $request->query->get('startDate');
        $endDate = $request->query->get('endDate');

        $max_records = 10;
        $em = $this->getDoctrine()->getManager();
        $trans = $em->getRepository('SupplierBundle:SupplierTransactionDetail')->getAllTransaction($rNumber,$gsNumber,$senderId,$receiverId,$docType,$direction,$startDate,$endDate,$page , 10);

        $count = $trans->count();
        $pagination = array(
            'page' => $page,
            'route' => 'supplier_tracking',
            'route_params' => array()
        );

        if ($max_records > 0 ){
            $pagination['pages_count'] = max(ceil($count / $max_records), 1);
        }

        return $this->render('SupplierBundle:Supplier:tracking.html.twig',array('trans' => $trans, 'pagination' => $pagination));


    }
更新

supplier_tracking:
    pattern: /track/{page}
    defaults: { _controller: "SupplierBundle:Supplier:track" , page: 1 }
您的URL不同:

/track?match=all&refNumber=&direction=&docType=&startDate=&senderId=&endDate=&gsNumber=&receiverId=&submit=
上面显示了所有需要的参数,但是当您返回

track/2

是您的url,您缺少所需的所有参数


在后台功能的某个地方,您没有提供所有需要的参数

只需在模板中定义表单方法,并将其设置为“获取”或从标记中删除此属性(方法)。

您可以粘贴链接到
trackAction()的路由条目吗
?@MattHB:已更新它。它是提供
{page}
的查询字符串吗?你确定在按下“后退”按钮后它被正确地携带到控制器中了吗?查询参数是否在请求之间传递?@MattHB:这就是我不知道的,对不起,我指的是“方法”属性。请确保表单的method属性设置为“get”或根本没有。您似乎没有将查询参数传递给分页链接。我的意思是,您的搜索url如下所示:'/track?param=paramvalue¶m2=param2value',您的第2页url如下所示:'track/2'。因此,您应该在每个页面上都有来自不同集合的条目。您的分页链接应如下所示:“/track/2?param=paramvalue¶m2=param2value”等。编辑它以提供答案可以帮助我修改我的CAN,使其符合您所说的内容吗?非常感谢您的进一步帮助help@Errorhere你能显示你用来返回搜索页面的按钮吗?