Tengo una lista de elementos para mostrar en una página, con un formulario de búsqueda encima para filtrar estos elementos, como en cualquier back-end habitual. El problema es que no sé cómo agregar los criterios de búsqueda a una consulta existente con combinaciones ... Esto es lo que tengo:Cómo implementar un formulario de filtro de búsqueda con Symfony2
Utilizo un método específico en el repositorio asociado a la entidad para agregar uniones en el consulta (para evitar muchas consultas). El controlador es el siguiente:
class ModelController extends Controller
{
public function indexAction(Request $request)
{
// ...
$em = $this->getDoctrine()->getManager();
$query = $em->getRepository('AcmeDemoBundle:Item')->getList();
}
}
El método getList
en el repositorio es el siguiente:
use Doctrine\ORM\EntityRepository;
// ...
class ItemRepository extends EntityRepository
{
public function getList()
{
$queryBuilder = $this
->createQueryBuilder('i')
->innerJoin('i.brand', 'b');
return $queryBuilder->getQuery();
}
}
que crea un objeto ItemSearchType
formulario con varios campos para buscar elementos.
¿Cómo puedo agregar fácilmente los criterios de búsqueda de los datos proporcionados en el formulario de búsqueda para mostrar los elementos filtrados?
Esto es lo que hay en mi regulador en relación con la búsqueda:
class ModelController extends Controller
{
public function indexAction(Request $request)
{
// ...
if ($request->getMethod() === 'POST') {
$searchForm->bindRequest($request);
if ($searchForm->isValid()) {
$searchCriteria = $searchForm->getData();
// Do something with this data! ...but I don't know how
}
}
}
Gracias!
Esta es la mejor respuesta. LexikFormFilterBundle resuelve el problema de filtrar una entidad. La respuesta de AdrienBrault también funcionaría, pero no es capaz de filtrar por, por ejemplo, daterange. –
Gracias por el consejo con LexikFormFilterBundle me estaba cansando de todas las preguntas y respuestas de filtro. el paquete de filtros ahorra mucho trabajo y complicaciones allí :) – Sharpy35