Symfony 2 – Макет встраивает "no entity / class form" проверка не работает

Я разрабатываю блог в symfony, и я застрял в формах, которые встроены в макет. В моем случае простая форма поиска.

<div class="b-header-block m-search"> {{ render(controller('YagoQuinoySimpleBlogBundle:Blog:searchArticles')) }} </div> 

Чтобы отобразить форму, я использую встроенный контроллер внутри файла ветви макета.

 public function searchArticlesAction(Request $request) { $form = $this->createForm(new SearchArticlesType()); $form->handleRequest($request); if ($form->isValid()) { // Do stuff here } return $this->render('YagoQuinoySimpleBlogBundle:Blog:searchArticles.html.twig', array( 'form' => $form->createView() )); } 

IndexAction – это тот, который извлекает данные формы и фильтрует список статей.

 public function indexAction(Request $request) { $form = $this->createForm(new SearchArticlesType()); $form->handleRequest($request); if ($form->isValid()) { $data = $form->getData(); $criteria = array( 'title' => $data['search'] ); } else { $criteria = array(); } $articles = $this->getDoctrine()->getRepository('YagoQuinoySimpleBlogBundle:Article')->findBy($criteria, array( 'createDateTime' => 'DESC' ), 5); return $this->render('YagoQuinoySimpleBlogBundle:Blog:index.html.twig', array('articles' => $articles)); } 

SearchArticlesType – это класс формы

 class SearchArticlesType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('search', 'text', array( 'constraints' => new NotBlank() )) ->add('submit', 'submit', array( 'label' => 'Buscar' )); } public function getName() { return 'searchArticles'; } } 

Проблема возникает, когда я отправляю эту форму. IndexAction делает свою часть, проверяя форму и фильтруя статьи, но когда контроллер встраивания пытается проверить данные (только для отображения информации или чего-то еще)

 $form->handleRequest($request); if ($form->isValid()) { // Do stuff here } 

Я чувствую, что что-то упускаю.

Спасибо за помощь!

Когда вы вызываете render(controller('your_route')) вы фактически делаете запрос sub, который означает, что пакеты параметров опустели, поэтому ваш запрос не обрабатывается формой.

Если вы используете 2.4+, вы можете получить главный запрос из стека запросов, используя ..

 /** @var \Symfony\Component\HttpFoundation\RequestStack $requestStack */ $requestStack = $this->get('request_stack'); $masterRequest = $requestStack->getMasterRequest(); 

И тогда вы можете обрабатывать этот запрос в вашем обработанном контроллере в отличие от текущего (вспомогательного) запроса, например ..

 $form->handleRequest($masterRequest); 

В вашем: public function searchArticlesAction(Request $request) вам не хватает второго аргумента при создании формы

 $searchArticle = new SearchArticle(); // I assume this is how you named the Entity, if not just change the entity name $form = $this->createForm(new SearchArticlesType(), $article);