使用symfony2过滤

csg*_*csg 5 php url-routing symfony

Symfony2是否有任何开源(或示例)代码可以使用多个参数过滤某些模型?在这个Trulia网页上可以看到我正在寻找的一个很好的例子.

http://www.trulia.com/for_sale/30000-1000000_price/10001_zip/

http://www.trulia.com/for_rent/Chicago,IL/#for_rent/Chicago,IL/0-500_price/wd,dw_amenities/sm_dogs_pets"

http://www.trulia.com/for_rent/Chicago,IL/#for_rent/Chicago,IL/400-500_price/wd,dw_amenities

http://www.trulia.com/for_rent/Chicago,IL/#for_rent/Chicago,IL/wd,dw_amenities"

http://www.trulia.com/for_rent/Chicago,IL/#for_rent/Chicago,IL/400p_price/dw,cs_amenities

http://www.trulia.com/for_rent/Chicago,IL/#for_rent/Chicago,IL/1p_beds/1p_baths/400p_price/dw,cs_amenities

请注意在单击表单时如何构建URL,我想是使用一个控制器来处理所有这些路由,它是如何完成的?我不认为它会将所有可能的路由重定向到特定的控制器(如下所示),也许某种动态路由?

/**
 * @Route("/for_rent/{state}/{beds}_beds/{bath}_bath/{mix_price}-{max_price}_price /{amenities_list}
 * @Route("/for_rent/{state}/{mix_price}-{max_price}_price/{amenities_list}
 * @Route("/for_rent/{state}/{bath}_bath/{mix_price}-{max_price}_price/{amenities_list}
 * @Route("/for_rent/{state}/{mix_price}_price/{amenities_list}
 * @Route("/for_rent/{state}/{beds}_beds/{bath}_bath/{amenities_list}    
 * ........
 */

public function filterAction($state, $beds, $bath, $min_price, $max_price ....)
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Pro*_*tic 1

对于简单查询(即不需要数据范围,例如最小值-最大值),您可以使用实体存储库通过给定的请求参数查找实体。假设您的实体是Acme\FooBundle\Entity\Bar

$em = $this->getDoctrine()->getEntityManager();
$repo = $em->getRepository('AcmeFooBundle:Bar');

$criteria = array(
    'state' => $state,
    'beds' => $beds,
    // and so on...
);
$data = $repo->findBy($criteria);
Run Code Online (Sandbox Code Playgroud)

构建$criteria数组时,您可能需要一些逻辑,以便仅按已提供的条件而不是所有可能的值进行排序。$data然后将包含符合条件的所有实体。

对于更复杂的查询,您需要研究DQL(也许还有自定义存储库),以便对要提取的实体进行更细粒度的控制。