【问题标题】:How to create Unique constraint object for form validation?如何为表单验证创建唯一约束对象?
【发布时间】:2012-11-12 07:32:45
【问题描述】:

我需要在控制器动作中动态添加约束,所以我这样做:

use Doctrine\Bundle\MongoDBBundle\Validator\Constraints\Unique;

// ...

    $form = $this->createFormBuilder($user)
        ->add('email', 'email', array(
            'constraints' => array(
                new NotBlank(),
                new MinLength(8),
                new MaxLength(100),
                new Email(),
                new Unique(),
            ),
        ))
        ->getForm();

但我收到此错误:

The options "fields" must be set for constraint Doctrine\Bundle\MongoDBBundle\Validator\Constraints\Unique

我尝试将 array('fields' => 'email')array('fields' => array('email')) 传递给构造函数,但没有成功:Warning: get_class() expects parameter 1 to be object, string given in /home/www/dev/public/pixfeed/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php line 63

那么我该如何使用这个类呢?

【问题讨论】:

  • 你试过 new Unique(array('fields' => 'email')) 还是 new Unique(array('fields' => array('email'))) ?
  • @getme 两者。我更新了我的问题

标签: forms mongodb symfony validation symfony-2.1


【解决方案1】:

Doctrine\Bundle\MongoDBBundle\Validator\Constraints\Unique 类通常用于整个 Document。例如

/**
 * @MongoDB\Document(collection="users")
 * @MongoDBUnique(fields="email")
 */
class User

在我看来,这在 ORM/ODM 级别上更有意义,而不仅仅是检查用户输入是否是唯一的。 但是如果你强制在Form中这样做,你可以写一个custom constraint

【讨论】:

  • 如果我这样做,我将无法登录(例如),因为它会检查电子邮件的唯一性。如果我添加验证组,该类将变成一堆注释。对于每个表单,我必须在文档的每个属性的每个约束中添加另一个验证组。这也使得扩展变得更加困难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 2013-05-21
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多