Symfony:FORM EVENT中的strtolower

时间:2017-12-02 06:32:40

标签: symfony symfony-3.3

使用Symfony 3.3,我想对所有电子邮件表单进行支持。

我使用此扩展程序:

class EmailTypeExtension extends AbstractTypeExtension
{
    public function getExtendedType()
    {
        return EmailType::class;
    }

    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder->addEventListener(
            FormEvents::POST_SUBMIT,
            [
                $this,
                'onPostSubmit'
            ]
        );
    }

    public function onPostSubmit(FormEvent $event)
    {
        $form = $event->getForm();
        $data = $event->getData();

        $form->setData(strtolower($data));
    }
}

但我有这个错误“你不能改变提交表格的数据。”如果我使用“PRE_SUBMIT”或“SUBMIT”事件,我的数据不会改变:/

你能帮助我吗?

1 个答案:

答案 0 :(得分:1)

您无法使用$form->setData()方法修改表单 您必须像这样修改FormEvent $event的数据:

public function onPostSubmit(FormEvent $event)
    {
        $data = $event->getData();

        // e.g. manipulate submitted data only if it is not empty
        if ($data["email"]) {
            $data["email"] = strtolower($data["email"]);
            $event->setData($data);
        }
    }