2017-08-31 6 views
0

ich diesen Code in meinem Projekt haben:Symfony 2 Formulare - Vergleichen zwei Felder

->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')) 
    )    
)) 

Wie ich ‚email‘ Felder vergleichen und ‚Nick‘, zu überprüfen, ob nicht gleich sind? Ich habe versucht, NotEqualTo zu verwenden, aber ich weiß nicht, was Wert vergleichen sollte.

+0

Verwenden Sie dieses Formular mit Datenklasse? –

+0

Ja, ich verwende Datenklasse –

Antwort

0

In der Datenklasse Callback-Validator

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

1

Ein sehr einfacher und straigforward Ansatz nutzen können, die würde nicht Rückrufe oder benutzerdefinierte Validatoren erfordern sei eine Behauptung, die Gebrauch von der Ausdruckssprache macht. Klingt kompliziert, ist aber nicht - siehe https://pehapkari.cz/blog/2017/02/11/symfony-validator-comparison-constraints/ für ein Beispiel.

Das Beispiel verwendet Anmerkungen, aber wie Sie oben geschrieben haben, dass Sie data_class verwenden, sollten Sie das gleiche in Ihrem Formulartyp tun können.

Verwandte Themen