Php Symfony2,如何使用KnpPaginatorBundle和QueryBuilder传递参数sort和direction

Php Symfony2,如何使用KnpPaginatorBundle和QueryBuilder传递参数sort和direction,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我使用KnpPaginatorBundle和存储库中的QueryBuilder来选择数据。我想知道如何在查询中传递表单发送的参数排序和方向 这是第四种形式: <form action="" method="get" class="form_sort" id="myForm"> <span class="manage_title">Sort by:</span>

我使用KnpPaginatorBundle和存储库中的QueryBuilder来选择数据。我想知道如何在查询中传递表单发送的参数排序方向

这是第四种形式:

<form action="" method="get" class="form_sort" id="myForm">
                        <span class="manage_title">Sort by:</span>
                            <select class="select_styled white_select" id="sort_list" name="option">
                                <option value="">-------</option>
        {{ knp_pagination_sortable(pagination, 'Country A-Z', 'country', {'sort': 'country', 'direction': 'asc'}) }}
        {{ knp_pagination_sortable(pagination, 'Country Z-A', 'country', {'sort': 'country', 'direction': 'desc'}) }}
        {{ knp_pagination_sortable(pagination, 'City A-Z', 'destination', {'sort': 'destination', 'direction': 'asc'}) }}
        {{ knp_pagination_sortable(pagination, 'City Z-A', 'destination', {'sort': 'destination', 'direction': 'desc'}) }}
                            </select>
</form>
public function listAction($page, Request $request)
{
$em = $this->getDoctrine()->getManager();

$paginator  = $this->get('knp_paginator');


$listTravels = $em->getRepository('ProjectTravelBundle:Travel')->getListTravelsFrontend();

$pagination = $paginator->paginate(
    $listTravels,
    $this->get('request')->query->get('page', $page)/*page number*/,
    10/*limit per page*/
);

return $this->render('ProjectFrontendBundle:Frontend:list.html.twig',array(
    'pagination' => $pagination
));
}
public function getListTravelsFrontend()
{

$qb = $this->createQueryBuilder('t')
    ->leftJoin('t.image', 'i')
    ->addSelect('i')
    ->leftJoin('t.agence', 'a')
    ->addSelect('a')
    ->Where('t.enabled = 1');

return $qb->getQuery()->getResult();

}
public function getListTravelsFrontendQueryBuilder()
{
   $qb = $this->createQueryBuilder('t')
       ->leftJoin('t.image', 'i')
       ->addSelect('i')
       ->leftJoin('t.agence', 'a')
       ->addSelect('a')
       ->Where('t.enabled = 1');

return $qb;
}
public function listAction($page, Request $request)
{
$em = $this->getDoctrine()->getManager();

$paginator  = $this->get('knp_paginator');

$qb = $em->getRepository('ProjectTravelBundle:Travel')->getListTravelsFrontendQueryBuilder();

$pagination = $paginator->paginate(
    $qb,
    $request->query->get('page', $page)/*page number*/,
    10/*limit per page*/
);

return $this->render('ProjectFrontendBundle:Frontend:list.html.twig',array(
    'pagination' => $pagination
));
}
旅游观光:

<form action="" method="get" class="form_sort" id="myForm">
                        <span class="manage_title">Sort by:</span>
                            <select class="select_styled white_select" id="sort_list" name="option">
                                <option value="">-------</option>
        {{ knp_pagination_sortable(pagination, 'Country A-Z', 'country', {'sort': 'country', 'direction': 'asc'}) }}
        {{ knp_pagination_sortable(pagination, 'Country Z-A', 'country', {'sort': 'country', 'direction': 'desc'}) }}
        {{ knp_pagination_sortable(pagination, 'City A-Z', 'destination', {'sort': 'destination', 'direction': 'asc'}) }}
        {{ knp_pagination_sortable(pagination, 'City Z-A', 'destination', {'sort': 'destination', 'direction': 'desc'}) }}
                            </select>
</form>
public function listAction($page, Request $request)
{
$em = $this->getDoctrine()->getManager();

$paginator  = $this->get('knp_paginator');


$listTravels = $em->getRepository('ProjectTravelBundle:Travel')->getListTravelsFrontend();

$pagination = $paginator->paginate(
    $listTravels,
    $this->get('request')->query->get('page', $page)/*page number*/,
    10/*limit per page*/
);

return $this->render('ProjectFrontendBundle:Frontend:list.html.twig',array(
    'pagination' => $pagination
));
}
public function getListTravelsFrontend()
{

$qb = $this->createQueryBuilder('t')
    ->leftJoin('t.image', 'i')
    ->addSelect('i')
    ->leftJoin('t.agence', 'a')
    ->addSelect('a')
    ->Where('t.enabled = 1');

return $qb->getQuery()->getResult();

}
public function getListTravelsFrontendQueryBuilder()
{
   $qb = $this->createQueryBuilder('t')
       ->leftJoin('t.image', 'i')
       ->addSelect('i')
       ->leftJoin('t.agence', 'a')
       ->addSelect('a')
       ->Where('t.enabled = 1');

return $qb;
}
public function listAction($page, Request $request)
{
$em = $this->getDoctrine()->getManager();

$paginator  = $this->get('knp_paginator');

$qb = $em->getRepository('ProjectTravelBundle:Travel')->getListTravelsFrontendQueryBuilder();

$pagination = $paginator->paginate(
    $qb,
    $request->query->get('page', $page)/*page number*/,
    10/*limit per page*/
);

return $this->render('ProjectFrontendBundle:Frontend:list.html.twig',array(
    'pagination' => $pagination
));
}

排序是数据库层上的句柄(使用mysql
orderby
),所以不能从
getResult()
传递数据数组。您必须将
QueryBuilder
实例作为目标传递给您
paginate()
调用。KnpPaginator有专门的侦听器和助行器,可以根据请求按正确的顺序修改查询,然后为您执行分页操作

旅游观光:

<form action="" method="get" class="form_sort" id="myForm">
                        <span class="manage_title">Sort by:</span>
                            <select class="select_styled white_select" id="sort_list" name="option">
                                <option value="">-------</option>
        {{ knp_pagination_sortable(pagination, 'Country A-Z', 'country', {'sort': 'country', 'direction': 'asc'}) }}
        {{ knp_pagination_sortable(pagination, 'Country Z-A', 'country', {'sort': 'country', 'direction': 'desc'}) }}
        {{ knp_pagination_sortable(pagination, 'City A-Z', 'destination', {'sort': 'destination', 'direction': 'asc'}) }}
        {{ knp_pagination_sortable(pagination, 'City Z-A', 'destination', {'sort': 'destination', 'direction': 'desc'}) }}
                            </select>
</form>
public function listAction($page, Request $request)
{
$em = $this->getDoctrine()->getManager();

$paginator  = $this->get('knp_paginator');


$listTravels = $em->getRepository('ProjectTravelBundle:Travel')->getListTravelsFrontend();

$pagination = $paginator->paginate(
    $listTravels,
    $this->get('request')->query->get('page', $page)/*page number*/,
    10/*limit per page*/
);

return $this->render('ProjectFrontendBundle:Frontend:list.html.twig',array(
    'pagination' => $pagination
));
}
public function getListTravelsFrontend()
{

$qb = $this->createQueryBuilder('t')
    ->leftJoin('t.image', 'i')
    ->addSelect('i')
    ->leftJoin('t.agence', 'a')
    ->addSelect('a')
    ->Where('t.enabled = 1');

return $qb->getQuery()->getResult();

}
public function getListTravelsFrontendQueryBuilder()
{
   $qb = $this->createQueryBuilder('t')
       ->leftJoin('t.image', 'i')
       ->addSelect('i')
       ->leftJoin('t.agence', 'a')
       ->addSelect('a')
       ->Where('t.enabled = 1');

return $qb;
}
public function listAction($page, Request $request)
{
$em = $this->getDoctrine()->getManager();

$paginator  = $this->get('knp_paginator');

$qb = $em->getRepository('ProjectTravelBundle:Travel')->getListTravelsFrontendQueryBuilder();

$pagination = $paginator->paginate(
    $qb,
    $request->query->get('page', $page)/*page number*/,
    10/*limit per page*/
);

return $this->render('ProjectFrontendBundle:Frontend:list.html.twig',array(
    'pagination' => $pagination
));
}
动作控制器:

<form action="" method="get" class="form_sort" id="myForm">
                        <span class="manage_title">Sort by:</span>
                            <select class="select_styled white_select" id="sort_list" name="option">
                                <option value="">-------</option>
        {{ knp_pagination_sortable(pagination, 'Country A-Z', 'country', {'sort': 'country', 'direction': 'asc'}) }}
        {{ knp_pagination_sortable(pagination, 'Country Z-A', 'country', {'sort': 'country', 'direction': 'desc'}) }}
        {{ knp_pagination_sortable(pagination, 'City A-Z', 'destination', {'sort': 'destination', 'direction': 'asc'}) }}
        {{ knp_pagination_sortable(pagination, 'City Z-A', 'destination', {'sort': 'destination', 'direction': 'desc'}) }}
                            </select>
</form>
public function listAction($page, Request $request)
{
$em = $this->getDoctrine()->getManager();

$paginator  = $this->get('knp_paginator');


$listTravels = $em->getRepository('ProjectTravelBundle:Travel')->getListTravelsFrontend();

$pagination = $paginator->paginate(
    $listTravels,
    $this->get('request')->query->get('page', $page)/*page number*/,
    10/*limit per page*/
);

return $this->render('ProjectFrontendBundle:Frontend:list.html.twig',array(
    'pagination' => $pagination
));
}
public function getListTravelsFrontend()
{

$qb = $this->createQueryBuilder('t')
    ->leftJoin('t.image', 'i')
    ->addSelect('i')
    ->leftJoin('t.agence', 'a')
    ->addSelect('a')
    ->Where('t.enabled = 1');

return $qb->getQuery()->getResult();

}
public function getListTravelsFrontendQueryBuilder()
{
   $qb = $this->createQueryBuilder('t')
       ->leftJoin('t.image', 'i')
       ->addSelect('i')
       ->leftJoin('t.agence', 'a')
       ->addSelect('a')
       ->Where('t.enabled = 1');

return $qb;
}
public function listAction($page, Request $request)
{
$em = $this->getDoctrine()->getManager();

$paginator  = $this->get('knp_paginator');

$qb = $em->getRepository('ProjectTravelBundle:Travel')->getListTravelsFrontendQueryBuilder();

$pagination = $paginator->paginate(
    $qb,
    $request->query->get('page', $page)/*page number*/,
    10/*limit per page*/
);

return $this->render('ProjectFrontendBundle:Frontend:list.html.twig',array(
    'pagination' => $pagination
));
}

“方向”是什么意思?方向asc或DESC有没有可能获得一个没有别名(t.country)的url,像这样
/travels?sort=country&direction=asc
不是这样
/travels?sort=t.country&direction=asc
?@hous我认为这是不可能的。@hous此功能已在此处请求: