MySearchSystem
Clase para realizar filtros sobre listados bundle para Symfony
Ejemplo de uso en un Controlador ...
controller/PersonController.php
<?php
namespace App\Controller;
use App\Entity\Person;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Knp\Component\Pager\PaginatorInterface;
use DidWeb\MyResourcesBundle\MySearchSystem\MySearchSystem;
/**
* @Route("/person")
*/
class PersonController extends AbstractController
{
public $mySearchSystem;
public function __construct() {
$allFilters = ['Por nombres'=>'by_names'];
$this->mySearchSystem = new MySearchSystem($allFilters, 'person_search_web');
}
/**
* @Route("/", name="person_index", methods={"GET"})
*/
public function index(Request $request, PersonRepository $personRepository, PaginatorInterface $paginator): Response
{
$formSearch = $this->createForm(PersonSearchWebType::class);
$currentPage = MyExtras::checkRequest('page', $request, 1);
$allPerson = $personRepository->findAll();
$allPerson = $this->allFilters($allPerson, $request);
$paginatePersons = $paginator->paginate(
$allPerson,
$currentPage,
15
);
$this->mySearchSystem->updateStatus($request);
return $this->render('person/index.html.twig', [
'people' => $paginatePersons,
'mySearchSystem' => $this->mySearchSystem,
'formSearch' => $formSearch->createView(),
]);
}
public function allFilters($allElements, $request) {
// Filtrado por nombre y apellidos
$resultFilter = $this->mySearchSystem->filterByNames($allElements, $request,
'by_names',
['getName', 'getSurnameFirst', 'getSurnameSecond']);
return $resultFilter;
}
/**
* @Route("/limpiar-filtro", name="person_admin_clean_filter")
*/
public function cleanFilters(Request $request){
$this->mySearchSystem->cleanFilters($request);
return $this->redirectToRoute('person_index');
}
} Form/PersonSearchWebType.php
templates/index.html.twig
Last updated
Was this helpful?