我的项目中有代码:
->add('email', 'text', array(
'translation_domain' => 'KlientRejestracja',
'label' => 'E-mail (login):',
'constraints' => array(
new NotBlank(array('message' => 'emailisNotValid')),
new Email(array('message' => 'emailisNotValid')),
)
))
->add('nick', 'text', array(
'label' => 'Podaj pseudonim<span style="color: red">*</span>:',
'translation_domain' => 'KlientRejestracja',
'required' => false,
'empty_data' => '',
'constraints' => array(
new NotEqualTo(array('value' => '??????','message' => 'imieisNotValid'))
)
))
我如何比较字段'email'和'nick',以检查是否不一样? 我尝试过使用NotEqualTo,但我不知道应该比较什么值。
答案 0 :(得分:1)
一种非常简单且过于简单的方法,它不需要回调或自定义验证器,这是一种利用表达式语言的断言。听起来很复杂,但事实并非如此 - 请参阅https://pehapkari.cz/blog/2017/02/11/symfony-validator-comparison-constraints/以获取示例。
示例使用注释,但正如您在上面所写的那样使用data_class
,您应该能够在表单类型中执行相同操作。
答案 1 :(得分:0)
将回调验证器添加到数据类
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
class xxx
{
...
/**
* @Assert\Callback()
*/
public function validate(ExecutionContextInterface $context, $payload)
{
if ($this->email == $this->nick) {
$context->buildViolation('error text')
->atPath('email')
->addViolation();
}
}
...
}
https://symfony.com/doc/current/reference/constraints/Callback.html