Symfony2自定义最小年龄验证器 - 树枝中没有显示错误消息?

时间:2012-04-05 16:07:17

标签: symfony doctrine-orm

我有一个足够直接的年龄自定义验证器:

约束(Minage.php)

namespace MyCompany\VisitBundle\Component\Validator\Constraints;
use Symfony\Component\Validator\Constraint;

/**
 * @Annotation
 */
class Minage extends Constraint
{
    public $message = 'The user must be {{ age }} or over';
    public $age = 18;

    public function validatedBy()
    {
        return get_class($this).'Validator';
    }
}

验证者(MinageValidator.php)

namespace MyCompany\VisitBundle\Component\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class MinageValidator extends ConstraintValidator
{
    public function isValid($value, Constraint $constraint)
    {
        $minAge = strtotime(sprintf("-%s YEAR", $constraint->age));
        if(strtotime($value->format("Y-m-d")) > $minAge)
        {
            $this->setMessage($constraint->message,
                              array('{{ age }}' => $constraint->age));
            return false;
        }
        return true;
    }
}

在我的实体中(剥离不重要的部分)

use MyCompany\VisitBundle\Component\Validator\Constraints as MyCompanyAssert;

/**
 * @ORM\Column(name="birth_date", type="datetime")
 * @MyCompanyAssert\Minage(age="18")
 */
private $birth_date;

并在树枝上

{{ form_errors(form.birth_date) }}
{{ form_widget(form.birth_date) }}

我确定验证器返回false但我的表单拒绝显示错误消息所有其他验证器(开箱即用的非自定义)工作正常并显示各自的错误。任何的想法?

翻译被禁用,因此它不会在文件中查找翻译。

提前致谢。

更新:form_errors(form.birth_date)无效但form_errors(form)无效?为什么它被指定为全局表单错误?

2 个答案:

答案 0 :(得分:3)

此行为的原因是错误冒泡。将字段的error_bubbling选项设置为false

答案 1 :(得分:0)

您可以尝试在验证器的$this->context->addViolation($constraint->message);方法中添加isValid