Symfony 表单验证 getter 总是触发/失败

问题描述 投票:0回答:2

我正在使用 Symfony 的验证器 Getter 组件 与 symfony 表单结合使用。

在我的一个实体文件中,我有:

use Symfony\Component\Validator\Constraints as Assert;

class StudentPaper
{
   .....
   /**
    * @Assert\IsTrue(message = "You must include a paper with your submission")
    */
   public function hasPaper()
   {
       // I originally had logic that checked the validity, but just 
       // changed the return value to 'true' to prove that it's not working.
       return true;
   }
}

不幸的是,验证总是失败(即使我将返回值硬核为

true
)。 验证代码似乎没有执行,表单触发了错误。 我什至尝试用
IsFalse
和硬编码
false
替换它。 结果相同。

有人遇到过这个吗?

Symfony 2.8。 PHP 5.6.15

symfony
2个回答
1
投票

嗯,我无法完全解释实际问题是什么(因为我不知道),但我确实找到了解决方案。

在我的 StudentPaper 实体中

 /**
 * Bidirectional - Student Papers have one file.
 *
 * @ORM\OneToOne(targetEntity="StudentPaperFile", inversedBy="student_paper", cascade={"persist", "remove"}, orphanRemoval=true)
 * @ORM\JoinColumn()
 * @Assert\Valid()
 */
protected $paper;

作为财产。 事实证明,具有名为

paper
的属性和名为
hasPaper()
的验证 getter 会导致意外行为。 一旦我将函数名称从
hasPaper()
更改为
hasTesting()
hasSubmittedPaper
,吸气剂就会按预期工作。

所以解决方案是 getter 函数不能是 get/is/has + 映射的属性名称。


0
投票

我遇到了同样的问题(未设置对象值),将 getter 名称从

(is|has|get)Property
更改为不同的名称
(is|has|get)Something
并没有解决问题。但是,指定验证组确实:

这有效:

System\Bus\DTO\Filter:
  getters:
    inRange:
      - Range:
          min: 0
          max: 86400
          groups: [Profiles]

但这不是:

System\Bus\DTO\Filter:
  getters:
    inRange:
      - Range:
          min: 0
          max: 86400
© www.soinside.com 2019 - 2024. All rights reserved.