Symfony 2.6-如何使用validation.yml验证非实体表单


Symfony 2.6 - How to validate non-entity form using validation.yml?

我有一个不代表任何Entity对象的表单,但是,我想验证这个表单,但由于某些原因(例如干净的代码等),必须使用validation.yml文件来完成。

我将表单对象存储在''src'ZaquPL'MyCustomBundle'Form'Type'MyCustomFormType.php中。此外,我创建了validation.yml文件:

ZaquPL'MyCustomBundle'Form'Type'MyCustomFormType:
    properties:
        myField:
            - NotBlank: ~

但我的表格没有经过验证$form->isValid()始终返回true

我认为链接包含了您想要的完美示例。http://symfony.com/doc/current/cookbook/doctrine/registration_form.html

您可以看到,有一个名为Registration的模型不是实体。给你http://symfony.com/doc/current/cookbook/doctrine/registration_form.html#embedding-的用户注册

该类的目录为src/Acme/AccountBundle/Form/Model/Registration.php,可以根据需要进行完美验证。

在我看来,这是不可能的。放在注释或yml文件中的验证器应该与实体对象连接,而不是与表单类型连接。

但也有一些小的变通办法。

您可以创建自己的FormBuilder服务。他的方法应该将FormType作为参数,然后他将重写FormType,以获得由方法"createFormBuilder"创建的表单:Symfony表单文档。然后,在该服务中,您可以通过以下方式读取验证文件并添加验证器:Symfony文档-添加验证

这真的很耗时,我认为最好将验证器连接到实体上。

只需创建一个普通的php对象作为模型类,并将其用作createForm()中的数据对象。然后您可以在这个简单的模型对象上创建validation.yml。