使用带有 symfony 3 的表单将数据放入数组

get data into array using a form with symfony 3

我在这里感觉有点愚蠢,因为我在 symfony 3 中完成了一些复杂的工作,但我不知道,在尝试如此简单的任务时我缺少一些简单的东西。

这应该很简单,但我做不到。

在get方法中从请求中获取数据非常简单。只用"request->query('param')"就够了。

但我想使用 formtype 或表单创建一个包含这些参数的索引数组,并利用自动将数据转换为正确类型的优势。

我有这个数组:

$booking = ['dateIn' => null, 'dateOut' => null]

还有这个表格

$form = $this->createFormBuilder($booking, ['csrf_protection' => false])
            ->setMethod('GET')
            ->add('dateIn', TextType::class)
            ->add('dateOut', TextType::class)
            ->getForm();

当我在调用后转储数据时

"/book?dateIn=xxxx&dateOut=xxxxx"

$form->handleRequest($request);    
$form->getData();

还是

['dateIn' => null, 'dateOut' => null]

我使用 TextType 而不是 DateType 来简化它并在测试这个东西时丢弃其他问题。但我的目标是让这个参数也转换。

怎么了?我应该"simpler"(避免表格)还是使用真实的预订class,等等。我不想使用任何安全复杂性,因为我在这里不需要它。

谢谢!

默认表单名称是 form 所以我认为这应该与参数一起使用,例如:

/book?[form]dateIn=xxxx&[form]dateOut=xxxxx

您可以使用 formFactory 服务修改表单名称,例如:

$form = $this->get('form.factory')->createNamedBuilder('','Symfony\Component\Form\Extension\Core\Type\FormType', $booking, ['csrf_protection' => false])
            ->setMethod('GET')
            ->add('dateIn', TextType::class)
            ->add('dateOut', TextType::class)
            ->getForm();

或者创建一个经典的表单类型并实现 getBlockPrefix 方法和 return 一个空字符串。

希望对您有所帮助