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?