Symfony 3:在Custom Validator中调用默认验证器,并检查字段是否有效

时间:2016-03-30 12:22:13

标签: symfony

我有一个自定义验证器,我获取了我的实体中定义的一个字段的值,然后我想使用内置验证器(例如NotBlank())验证该字段,以便在验证后我如果字段被验证则获得'true',如果不验证则获得'false'。

我的自定义验证器如下所示:

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\ConstraintValidator;


class UpdatePasswordValidator extends ConstraintValidator
{

    public function __construct()
    {

    }

    public function validate($email, Constraint $constraint)
    {
        /**
         * Getting field value from entity
         */
        $busNumber = $this->context->getRoot()->getData()->getBusnumber();

        /**
         * Validate $busNumber
         */
        $busNumberToValidate = $this->context->getValidator()
            ->inContext($this->context)
            ->atPath("busnumber")
            ->validate($busNumber, new NotBlank())->getViolations();
    }
}

在这种情况下,我想使用NotBlank()验证$ busNumber。 调用getViolations()会给我一个包含所有违规的对象,而我只需要一个与$ busNumber验证相关联的对象。

更新:我实际想要实现的目标是:

if ($busNumberToValidate)
{
    echo "busNumber field is validated";
}
else
{
    echo "busNumber field is NOT validated";    
}

$ busNumberToValidate应包含或不包含'busNumber'字段的错误,具体取决于验证结果。

2 个答案:

答案 0 :(得分:1)

以下是解决方案:

$busNumberToValidate = $this->context->getValidator()->validate($busNumber, new NotBlank());

if ($busNumberToValidate->has(0))
{
  echo "field is not validated";
}
else
{
  echo "field is validated";
}

// if you want to get the error message for the validated field 
echo $busNumberToValidate->get(0)->getMessage();

答案 1 :(得分:0)

扩展Composite Constraint

您可以在All Constraint

中找到示例