2012-04-05 7 views
4

Ich habe ein Mindestalter benutzerdefinierten Validator, die gerade nach vorne genug ist:Symfony2 benutzerdefinierte Mindestalter Validator - keine Fehlermeldung in Zweig angezeigt?

Die Beschränkung (Minage.php)

namespace MyCompany\VisitBundle\Component\Validator\Constraints; 
use Symfony\Component\Validator\Constraint; 

/** 
* @Annotation 
*/ 
class Minage extends Constraint 
{ 
    public $message = 'The user must be {{ age }} or over'; 
    public $age = 18; 

    public function validatedBy() 
    { 
     return get_class($this).'Validator'; 
    } 
} 

Der Validator (MinageValidator.php)

namespace MyCompany\VisitBundle\Component\Validator\Constraints; 
use Symfony\Component\Validator\Constraint; 
use Symfony\Component\Validator\ConstraintValidator; 

class MinageValidator extends ConstraintValidator 
{ 
    public function isValid($value, Constraint $constraint) 
    { 
     $minAge = strtotime(sprintf("-%s YEAR", $constraint->age)); 
     if(strtotime($value->format("Y-m-d")) > $minAge) 
     { 
      $this->setMessage($constraint->message, 
           array('{{ age }}' => $constraint->age)); 
      return false; 
     } 
     return true; 
    } 
} 

In meinem Unternehmen (Abziehen von Teilen, die nicht wichtig sind)

use MyCompany\VisitBundle\Component\Validator\Constraints as MyCompanyAssert; 

/** 
* @ORM\Column(name="birth_date", type="datetime") 
* @MyCompanyAssert\Minage(age="18") 
*/ 
private $birth_date; 

Und Zweig:

{{ form_errors(form.birth_date) }} 
{{ form_widget(form.birth_date) }} 

ich sicher weiß, dass der Validator falsch zurückkehrt, aber meine Form weigert sich, die Fehlermeldung Alle anderen Prüfungen (out-of-the-box nicht zu zeigen, custom) funktionieren gut und zeigen ihre jeweiligen Fehler. Irgendeine Idee?

Übersetzungen sind deaktiviert, daher wird nicht nach einer Übersetzung in einer Datei gesucht.

Vielen Dank im Voraus.

UPDATE: form_errors(form.birth_date) funktioniert nicht aber form_errors(form) funktioniert? Warum wird es als globaler Formularfehler zugewiesen?

Antwort

3

Der Grund für dieses Verhalten ist Fehler sprudeln. Setzen Sie die Option error_bubbling des Felds auf false.

+0

Yups, das war das Problem. Wäre schön gewesen, wenn die Formularvalidierungsdokumentation dies erwähnt hätte. Es ist jedoch in der Form Feldtypen Abschnitt erwähnt (http://symfony.com/doc/current/reference/forms/types/text.html#error-bubbling) Vielen Dank! – Flukey

+0

@Flukey, wenn die Dokumente verbessert werden könnten, bitte hebe ein Ticket an (oder verzweige die Dokumente und schlage eine Verbesserung vor - ich bin mir nicht sicher für Symfony2). – halfer

0

Sie können versuchen, $this->context->addViolation($constraint->message); in isValid Methode Ihres Validators hinzufügen.

Verwandte Themen