我需要更改表单中某些字段的验证。验证器是通过一个相当大的yml文件进行配置的。我想知道是否有办法同时对两个字段进行验证。在我的情况下,有两个字段不能都为空。至少要填写一个。
不幸的是,到目前为止,我只能看到验证是基于每个字段而不是多个字段一起定义的。
问题是:在标准的yml配置中是否可能执行上述验证?
谢谢!
不幸的是,到目前为止,我只能看到验证是基于每个字段而不是多个字段一起定义的。
问题是:在标准的yml配置中是否可能执行上述验证?
谢谢!
Constraint
类。
src/Acme/DemoBundle/Validator/Constraints/CheckTwoFields.php
<?php
namespace Acme\DemoBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class CheckTwoFields extends Constraint
{
public $message = 'You must fill the foo or bar field.';
public function validatedBy()
{
return 'CheckTwoFieldsValidator';
}
public function getTargets()
{
return self::CLASS_CONSTRAINT;
}
}
通过扩展ConstraintValidator
类定义验证器,foo
和bar
是您想要检查的两个字段:
src/Acme/DemoBundle/Validator/Constraints/CheckTwoFieldsValidator.php
namespace Acme\DemoBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class CheckTwoFieldsValidator extends ConstraintValidator
{
public function validate($protocol, Constraint $constraint)
{
if ((empty($protocol->getFoo())) && (empty($protocol->getBar()))) {
$this->context->addViolationAt('foo', $constraint->message, array(), null);
}
}
}
使用验证器:
src/Acme/DemoBundle/Resources/config/validation.yml
Acme\DemoBundle\Entity\AcmeEntity:
constraints:
- Acme\DemoBundle\Validator\Constraints\CheckTwoFields: ~