Как получить данные из формы в symfony2

У меня есть метод:

public function showCategoryAction($id, $page, Request $request){
$em = $this->getDoctrine()->getManager();
$repositoryProduct = $em->getRepository('ShopDesktopBundle:Product');

$aFilter = array();
$form = $this->get('form.factory')->createNamedBuilder('', 'form',  null,  array(
'csrf_protection' => false,
))
->setMethod('GET')
->add('minimPrice', 'text', array('mapped' => false, 'label' => 'De la :' , 'attr'=>
array(
'placeholder'=>'Minim price',
'class'=>'form-control')))
->add('maxPrice', 'text',array('mapped' => false, 'label' => 'Pina la :' , 'attr'=>
array(
'placeholder'=>'Max price',
'class'=>'form-control')))
->getForm();

$form->handleRequest($request);
$var = $form->get('minimPrice')->getData();
print_r($var);
//Search products
$aProducts          = $repositoryProduct->getProductsOrderByDateDesc($id,null,$aFilter);
if (!$aProducts) {
throw $this->createNotFoundException('Products not found.');
}

$category = $em->getRepository('ShopDesktopBundle:Category')->findOneById($id);
if (!$category) {
throw $this->createNotFoundException('Category not found.');
}
//Create pagination
$paginator  = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$aProducts,
$page,
3
);

//Send data to view
return $this->render('ShopDesktopBundle:Category:category.html.twig',array(
'category'          => $category,
'pagination'        => $pagination,
'form' => $form->createView()
));
}

Мой взгляд :

<form action="{{ path('show_product_category',{ 'id':category.getId(), 'name':category.getCategoryLink() }) }}" method="get" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<input type="submit" class="btn btn-primary marg-left-20" value="Search"/>
</form>

Я ищу, и обычно все в порядке, но моя переменная $ var равна нулю. Я не понимаю, где моя проблема, возможно, я что-то упустил. Это хорошая идея для создания форм, которые не отображаются в контроллере? Пожалуйста, помогите мне. Спасибо заранее

0

Решение

     if ('POST' === $request->getMethod())
{
$form->bindRequest($request); //Symfony 2.0.x
//$form->bind($request); //Symfony 2.1.x

$name = $form->get('name')->getData();
}

Я не берег, но это должно работать для вас

0

Другие решения

Если вы используете Symfony 2.3, вы можете сделать это следующим образом:

public function showCategoryAction($id, $page, Request $request) {
//...
$form = // whatever...

if ($request->isMethod('POST'))
{
$form->submit($request);

if ($form->isValid())
{
// Do your magic!
// Persist your form, send email, blablabla...
return $this->redirect($this->generateUrl('your_url_to_show'));
}
}

return $this->render(/*same code you have...*/);
}

Кроме того, если я не работаю или $request пусто, вы также можете получить $request другим способом:

public function showCategoryAction($id, $page) {
$request = $this->get('request');
//...
}
0

По вопросам рекламы [email protected]