【问题标题】:get data into array using a form with symfony 3使用带有 symfony 3 的表单将数据放入数组
【发布时间】:2017-02-23 12:19:45
【问题描述】:

在这里我觉得有点愚蠢,因为我在 symfony 3 中做了一些复杂的事情,但我不知道,当我尝试做简单的任务时,我错过了一些简单的事情。

这应该很简单,但我无法让它工作。

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

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

我有这个数组:

$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 来简化并在测试这个东西时放弃其他问题。但我的目标是也转换此参数。

怎么了?我应该让它“更简单”(避免表格)还是使用真正的预订类等。我不想使用任何安全复杂性,因为我在这里不需要它。

谢谢!

【问题讨论】:

    标签: php symfony symfony-forms


    【解决方案1】:

    默认表单名称是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方法并返回一个空字符串。

    希望有帮助

    【讨论】:

    • 谢谢!!表格名称!!!因为我总是使用 post 或 json 封装的数据来向控制器发送数据,所以我没有注意到这个简单但重要的细节。
    猜你喜欢
    • 2017-03-30
    • 2020-02-10
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2012-07-03
    • 2016-04-25
    相关资源
    最近更新 更多