【问题标题】:Symfony 2.6 - How to validate non-entity form using validation.yml?Symfony 2.6 - 如何使用validation.yml 验证非实体表单?
【发布时间】:2015-04-04 16:39:24
【问题描述】:

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

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

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

但是我的表单没有经过验证。 $form->isValid() 总是返回 true

【问题讨论】:

    标签: php forms validation symfony


    【解决方案1】:

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

    您看到有一个名为 Registration 的模型,它不是一个实体。这里是 http://symfony.com/doc/current/cookbook/doctrine/registration_form.html#embedding-the-user-form-into-a-registration-form

    这个类的目录是src/Acme/AccountBundle/Form/Model/Registration.php,这个可以根据需要完美验证。

    【讨论】:

      【解决方案2】:

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

      但是有一个小的解决方法。

      您可以创建自己的 FormBuilder 服务。他的方法应该将您的 FormType 作为参数,然后他将重写您的 FormType 以获取由方法“createFormBuilder”创建的表单:Symfony form documentation。然后在此服务中,您可以读取验证文件并以这种方式添加验证器: Symfony documentation - adding validation

      这真的很耗时,我认为最好将验证器附加到您的实体。

      【讨论】:

      • 抱歉,这不是必需的,内部服务的代码很丑
      【解决方案3】:

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

      【讨论】:

      • 我同意这个评论。简单地不创建实体,而只创建一个模型(不持久化到 db),并将类添加到validation.yml。然后您可以使用验证器服务进行验证。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 2014-06-24
      • 1970-01-01
      相关资源
      最近更新 更多