【问题标题】:Accessing normalized form data in a controller in Symofny 2在 Symfony 2 的控制器中访问规范化表单数据
【发布时间】:2016-03-21 21:12:50
【问题描述】:

我必须向我的 FormType 添加一个表单事件侦听器 (PRE_SUBMIT),以便根据用户提交的另一个字段的值设置字段的默认值:

//In my FormType:

public function onPreSubmit(FormEvent $event)
{
    $formData = $event->getData();
    if (empty($formData['time_until'])) {
        $date = new \DateTime($formData['time_from']);
        $date->add(new \DateInterval('PT1H'));
        $formData['time_until'] = $date->format('Y-m-d H:i');
    }
    $event->setData($formData);
}

time_unti 键被设置,然后它的值被映射到表单的time_until 字段,该字段是datetime 类型:

        ->add('time_until', datetime, [
            'required' => false,
            'input' => 'datetime',
            'widget' => 'single_text',
            'format' => 'yyyy-MM-dd HH:mm',
            'label' => false,
        ])

目前没有问题。但是,我需要访问控制器中表单字段的规范化值,而不是调用 $form->handleRequest($request); 后表单上存在的 DateTime 对象。

通过“规范化”,我的意思是我希望能够做到:

$form->get('time_until') 并返回一个格式为 'yyyy-MM-dd HH:mm' 的字符串,而不是存储在 time_until 键下的表单中的 DateTime 对象。

建议将不胜感激。谢谢!

【问题讨论】:

  • $form->get('time_until')->format('yyyy-MM-dd HH:mm');

标签: forms symfony


【解决方案1】:
  1. 你可以在你的表单类型类中添加一些属性$normalizedTimeUntil + 添加getter getNormalizedTimeUntil(),它会返回这个值。然后在 Form 事件中您可以设置此属性,在控制器中您可以使用 getter 函数将其从表单类型对象中拉出

  2. 或者您可以添加非映射字符串表单字段timeUntilStringhttp://symfony.com/doc/current/reference/forms/types/form.html#mapped)并填写在表单事件中

  3. 或者您可以添加转换器 (http://symfony.com/doc/current/cookbook/form/data_transformers.html) 以将此日期时间对象转换为字符串。例如,如果您需要在数据库中以字符串形式存储日期,这将很方便)。然后表单字段getter将在控制器中返回字符串(并且也会以字符串形式存储在数据库中)

【讨论】:

    猜你喜欢
    • 2014-12-31
    • 2017-06-27
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    相关资源
    最近更新 更多