Domanda

Vorrei visualizzare il messaggio di errore nel campo è per. So come mettere il messaggio di errore nel campo, ma voglio trovare un modo dinamico per controllare dopo ri-submittion, se il valore inserito non è il messaggio di errore stesso. Io uso le annotazioni dottrina. Per esempio, se il campo è "titolo", il messaggio di errore sarebbe stato "Il titolo deve essere compilato!". Così il campo del titolo non è vuota più, io fare clic su Invia di nuovo, ed è valido ora. Non voglio controllare ogni singolo campo come if $entity->getTitle() == "The title must be filled" ... Sono riuscito a fare questo con non visualizzato div errore nel ramo, e jQuery, ma io voglio sapere se c'è un modo migliore per fare questo dal controllore? Grazie

È stato utile?

Soluzione

Mi stai chiedendo come fare correttamente qualcosa nel modo sbagliato ... Se il valore di ingresso non è il valore che si desidera elaborare, dovrebbe non sono mai stati il ??valore per cominciare. Detto questo, sono sicuro che le tue ragioni ...

È necessario ascoltare FormEvents::BIND_CLIENT_DATA e cancellare i dati del modulo se corrisponde la stringa di errore.

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('title');
    $builder->get('title')->addEventListener(
        FormEvents::BIND_CLIENT_DATA,
        function(FilterDataEvent $event)
        {
            if ('The title must be filled' == $event->getData()) {
                $event->setData('');
            }
        },
    );

Se si desidera applicare questo comportamento a livello globale è necessario collegare questo listener usando un tipo di estensione modulo che si estende 'field'. Si avrà bisogno anche di introspezione tutti i possibili messaggi di errore di convalida per il campo corrente utilizzando il validatore e passare questi attraverso il traduttore, poi confrontare i risultati con i dati degli eventi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top