【问题标题】:How to validate only part of Symfony form without validation groups?如何在没有验证组的情况下仅验证 Symfony 表单的一部分?
【发布时间】:2015-01-17 23:01:31
【问题描述】:

我有一个动态生成的表单,只有一个字段。该字段因查询而异。我需要用正确的验证器验证这个字段。我认为最简单的方法是使用这一字段创建表单并验证整个表单。但是我错了。表单通过整个实体(不仅仅是一个字段)进行验证。

我需要表单,因为我的实体的每个字段都可以有自己的验证规则(可以是电子邮件验证、长度验证或范围验证等)。表单将仅通过字段名称捕获所有这些验证。它还可以将一些数据转换为适当的格式。

现在我有一个问题:如何仅验证表单的一个特定字段?

    $value = trim($request->get($field, '');
    $form = $this->createFormBuilder($order, array('csrf_protection' => false))
        ->add($field)
        ->getForm();
    $form->submit(array($field => $value));
    if ($form->isValid()) {
        $em->persist($order);
        $em->flush();
    }

【问题讨论】:

    标签: php forms validation symfony


    【解决方案1】:

    您可以使用此代码:

    $validator = $this->get('validator');
    if ($validator->validateProperty($containingValue, $property)) {
        $em->persist($order);
        $em->flush();
    }
    

    【讨论】:

      【解决方案2】:

      刚刚想通了:

      要验证一个字段,我不能使用$form->isValid(),而是$form->get($field)->isValid()

      $value = trim($request->get($field, '');
      $form = $this->createFormBuilder($order, array('csrf_protection' => false))
          ->add($field)
          ->getForm();
      $form->submit(array($field => $value));
      if ($form->get($field)->isValid()) {
          $em->persist($order);
          $em->flush();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 2021-02-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多