【问题标题】:Symfony2 Using Entity in Validation ConstraintSymfony2 在验证约束中使用实体
【发布时间】:2014-03-16 16:59:15
【问题描述】:

我正在尝试使用 Symfony 验证引擎验证一个唯一字段。我已经创建了验证约束并且一切正常,但我希望在我的验证器中拥有经过验证的实体(或 POST 数据)。这是它现在的样子:

<?php
    namespace Webrama\ProductBundle\Validator\Constraints;

    use Symfony\Component\Validator\Constraint;
    use Symfony\Component\Validator\ConstraintValidator;
    use Doctrine\ORM\EntityManager;
    use Symfony\Component\DependencyInjection\ContainerBuilder;
    use Symfony\Component\Translation\TranslatorInterface;

    class EanCodeValidator extends ConstraintValidator
    {
        private $entityManager;
        private $translator;
        /**
         * @param EntityManager $entityManager
         */
        public function __construct(EntityManager $entityManager, TranslatorInterface $translator)
        {
            $this->entityManager = $entityManager;
            $this->translator = $translator;
        }

... some logic ...

        private function isEanUnique($value)
        {
            $query = $this->entityManager->createQuery("SELECT p.id FROM WebramaProductBundle:Product p WHERE p.eanCode = :eanCode AND p.eanCode <> 0");
            $query->setParameter('eanCode', $value);

            $result = $query->execute();

            if(empty($result))
                return true;

            return false;
        }
    }

方法 isEanUnique 将在更新产品时返回 false,因为它本身包含 ean 并且它是正确的。我需要做什么来修复?

$query = $this->entityManager->createQuery("SELECT p.id FROM WebramaProductBundle:Product p WHERE p.eanCode = :eanCode AND p.eanCode <> 0 AND p.id <> :productId");
                $query->setParameter('eanCode', $value);
                        $query->setParameter('id', $this->product->getId());

但我不知道如何将 $this->product 带到这里...有什么想法吗?

【问题讨论】:

    标签: php sql validation symfony entities


    【解决方案1】:

    anwser 是文档...需要查看页面How to create custon validation constraint 上的Class Constraint Validator 段落。我做错的是我试图以这种方式强制执行类型提示:

    public function validate(Product $product, Constraint $constraint)
    {
            ...
    }
    

    应该只是:

    public function validate($product, Constraint $constraint)
    {
            ...
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多