symfony 4 ChoiceType选择要发送到另一个表单的值

时间:2018-05-06 16:22:10

标签: php symfony symfony4

我从symfony开始,我只是尝试使用ChoiceType在我的页面中定义多项选择,但不确定如何检索所选项目,我需要他们的ID,因为稍后我将在数据库中选择一个它们。

这是我的代码:

Controllernº1:

$areas = $this->getDoctrine()->getRepository(Area::class)->findAll();

$form = $this->createFormBuilder()
->add('name', TextType::class)
->add('areas',  ChoiceType::class,
    array('label' => $translator->trans("areas_label") . ':',
        'choices' => $areas,
        'choice_label' => 'getAreaName',
        'multiple'=>true)
)
->getForm();

$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
    $data = $form->getData();

return $this->redirectToRoute('results',
    array('name' => $data['name'], 
          'selected_areas'=> ??? ));   <--- any idea?
}

控制器nº2:我可以使用request-&gt; get

获取'结果'这些值
/**
* @Route("/results", name="results")  
*/
public function index(Request $request)
{
    $name = $request->get('name');
    $selected_areas = ????

感谢您提供任何帮助,

2 个答案:

答案 0 :(得分:0)

试试这个:

$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
 $name = $form->get('name')->getData();
 $areas = $form->get('areas')->getData();


return $this->redirectToRoute('results',
    array('name' => $name, 'areas' => $areas             
          ));
}

然后,在twig模板中,您可以通过以下方式访问它们:

{{ name }}
{{ areas }}

答案 1 :(得分:0)

最好使用EntityType,您可以在此处查看https://symfony.com/doc/current/reference/forms/types/entity.html。 然后下一个代码将返回您选择的实体。

$areas = $form->get('areas')->getData();