我尝试创建自定义验证规则,以在构建以下表单时使用:example。
这是我来的:
namespace Path\ToBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class NotValidSearch extends Constraint
{
public $message = 'Search string is invalid format.';
}
namespace Salda\ClientControlBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class ContainsNotValidSearchValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
if (count(explode(' ', $value)) !== 3) {
$this->context->addViolation($constraint->message);
}
}
}
然后尝试在表单构建器类中使用它:
use Path\ToBundle\Validator\Constraints\NotValidSearch;
$builder->add('search', 'search', array(
'label' => 'Predecessor',
'required' => false,
'mapped' => false,
'constraints' => new NotValidSearch(array(
'message' => 'invalid message ph'
))
));
但是当我提交表单时,它引发错误:致命错误:在/ path / to / vendor / symfony / symfony / src / Symfony / Bundle / FrameworkBundle / Validator /中找不到/ Path / ToBundle \ Validator \ Constraints \ NotValidSearchValidator类第71行的ConstraintValidatorFactory.php
我的问题是:我是否误解了如何使用自定义验证器,或者我只是丢失了某些东西或做错了?因为在构建表单时我不想在其中使用它,因为我需要在非映射属性上使用它。这是执行此操作的适当方法吗?或者还有其他方法吗?
在基Symfony\Component\Validator\Constraint
类中,有validatedBy方法
public function validatedBy()
{
return get_class($this).'Validator';
}
意味着您的班级NotValidSearch
将由NotValidSearchValidator
而不是您选择的班级进行验证ContainsNotValidSearchValidator
。
您将需要将验证器的名称更改为NotValidSearchValidator
或将validatedBy更改为验证器的正确名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句