Symfony не возвращает POST-значение

1

Я пытаюсь реализовать простую форму поиска с помощью Symfony и пытаюсь получить доступ к POST-значению внутри контроллера без успеха.

У меня есть следующий код внутри контроллера:

public function foodAction(Request $request)
{

    $defaultData = array('message' => 'Type your message here');

    $form = $this->createFormBuilder($defaultData)
        ->add('keyword', SearchType::class, array('attr' => array('class' => 'form-control', 'placeholder' => 'Ruokahaku'), 'label' => false))
        ->add('search', SubmitType::class, array('attr' => array('class' => 'btn btn-secondary'), 'label' => 'Hae'))
        ->getForm();

    $form->handleRequest($request);

    if($form->isValid()) {  

        $searchName = $request->request->get('keyword');

        return $this->render(
            'default/index.html.twig',
            array('foodsearched' => $searchName,
            'form' => $form->createView())
        );
    }

    return $this->render('default/index.html.twig', array(
        'form' => $form->createView()
    ));

}

Однако $ searchName всегда равно нулю, даже если

var_dump($request->request->get('form')); 

возвращает это:

array(3) { ["keyword"]=> string(6) "potato" ["search"]=> string(0) "" ["_token"]=> string(43) "2KIt0IYl3Ay-4vr-dEINKe3QNRxvMqmAFK1ILGflwoA" } 

Это означает, что переменная существует. Однако $ searchName остается NULL все время. Это поражает меня, потому что этот пример довольно сильно связан с книгой Symfony (версия 3.1, страницы 156 - 157). В чем может быть проблема?

Теги:
post
http-post

1 ответ

0
Лучший ответ

Вы должны получить данные (в виде массива) из формы, используя:

$data = $form->getData();

И если вы хотите получить пользовательское значение, например keyword, попробуйте:

$keyword = $form->get('keyword')->getData();
  • 0
    Это сработало :) Спасибо большое! Мне нужно пользовательское значение внутри контроллера, потому что я использую ключевое слово для поиска вещей из базы данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню