Symfony 2表单 - 比较两个字段

时间:2017-08-31 18:18:54

标签: php symfony

我的项目中有代码:

->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,但我不知道应该比较什么值。

2 个答案:

答案 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