Thursday, November 19, 2015

On-the-fly Symfony form for searches

Version 1: Typeless form

Inside the controller:
$q = $request->query->get('q');
$data = array('q' => $q); 
$searchForm = $this->get('form.factory')
    ->createNamedBuilder('', 'form', $data, array(
        'csrf_protection' => false,
        'method' => 'GET',
    ))
    ->add('q', 'text', array(
        'required' => false,
    ))
    ->getForm();

if($q) {
    $data = $searchForm->handleRequest($request)->getData();
    $qb
        ->andWhere($qb->expr()->like('name',  ':q'))
        ->setParameter('q', $data['q']);
} 
return $this->render('@Bundle:Entity:index.html.twig', array(
            'searchForm'    => $searchForm->createView()
        ));

Version 2:  using FormType

Inside controller:
$filterForm = $this->createForm(new SomeFilterType(), null, array(
    'method' => 'GET',
));

$filterForm->handleRequest($request);
if ($filterForm->isValid()) {
    $name = $filterForm->get('name')->getNormData();
//
}

No comments: