2014-12-30 7 views
7

In questo momento sto implementando la convalida utilizzando il componente Symfony Validator utilizzando le annotazioni nella mia classe Entity.Symfony2 Messaggio di convalida: quali variabili sono disponibili?

La documentazione di Symfony mostra che è possibile utilizzare determinati segnaposti per passare variabili tramite un messaggio e questi messaggi possono essere tradotti dal componente Traduttore.

Così, per esempio, è possibile scrivere la seguente annotazione:

/** 
* Assert\Length(
* min = 5, 
* max = 10, 
* minMessage = "Title too short: {{ limit }}", 
* maxMessage = "Title too long: {{ limit }}" 
*/ 
protected $title; 

Questo funziona bene, ma mi chiedevo che tipo di segnaposto sono a vostra disposizione? È possibile creare segnaposto personalizzati?

So che il segnaposto {{ value }} esiste (e funziona), ma non è nella pagina di documentazione di Symfony su come utilizzare la convalida Lunghezza.

Vorrei utilizzare un tag segnaposto come {{ key }} o {{ name }} di passare attraverso il nome tecnico del campo (in questo caso "titolo"), così posso scrivere il mio minMessage come minMessage = "{{ field }} too short: {{ limit }}"

ho cercato di controllare i componenti standard di Symfony per vedere come vengono gestiti questi segnaposto, ma non riesco a trovare un elenco corretto di variabili che sono disponibili per me.

Per favore aiutatemi! T_T

risposta

7

Se si verifica il codice per LengthValidator che è stato pubblicato come esempio, è possibile notare che queste "variabili" sono solo stringhe statiche che vengono sostituite all'interno della propria classe Validator.

Come tali, tutti gli di questi sono personalizzati, che è probabilmente anche il motivo per cui non esiste un elenco disponibile.

La classe:

https://github.com/symfony/Validator/blob/master/Constraints/LengthValidator.php

Rilevante frammento:

if (null !== $constraint->max && $length > $constraint->max) { 
      $this->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->maxMessage) 
       ->setParameter('{{ value }}', $this->formatValue($stringValue)) 
       ->setParameter('{{ limit }}', $constraint->max) 
       ->setInvalidValue($value) 
       ->setPlural((int) $constraint->max) 
       ->setCode(Length::TOO_LONG_ERROR) 
       ->addViolation(); 
      return; 
     } 
+0

Grazie per la vostra risposta rapida! Mi aspettavo di trovare le variabili nella classe Length, dovrei aver controllato ovviamente la classe LengthValidator. Ora so che le variabili possono essere dichiarate in un ConstraintValidator personalizzato. – StackOverflowUser