2009-08-13 12 views
8

Ho un controller che passa l'input da un modulo in una classe del modello per eseguire la convalida. Se la convalida ha esito positivo, voglio consentire al flusso di continuare e visualizzare la vista predefinita associata al controller.Zend diversi script di visualizzazione?

Il mio problema è che se la convalida non ha esito positivo, voglio che il modello restituisca i messaggi di errore di convalida e li visualizzi in una vista separata. Come posso impostare i messaggi di errore nella visualizzazione alternativa?

Grazie in anticipo.

risposta

4

Perché si desidera visualizzare i messaggi di errore in una vista diversa? Perché non costruire condizionali nella vista? Qualcosa come se la forma ha errori quindi echo i messaggi echo forma.

È possibile utilizzare $ this -> _ forward per inoltrare a un'altra azione con la rispettiva vista. Puoi passare qualunque cosa desideri. Basta passare l'oggetto form lungo, contiene tutti i messaggi di errore. Oppure puoi recuperare determinati messaggi di errore o tutti loro dall'oggetto modulo e passarli a una vista oa un'azione.

+0

Probabilmente dovrebbe andare con la stessa vista. Nel metodo di convalida restituisco un messaggio di errore in base a quale convalida non è riuscita, ad esempio non è riuscito a trovare l'articolo, l'elemento al di fuori dell'intervallo di date. Se passa, restituisco vuoto, quindi controlla nella vista se il valore restituito dalla convalida non è vuoto? E 'questo che intendi? – db83

+0

Sembra che tu stia facendo il controllo di validazione manualmente. Ma questo è ciò che i validatori sono lì ribalta e poi basta solo bisogno di chiamare $ form-> isValid() al fine di sapere se tutti i test sono passati. Se hai bisogno di validatori che ZF non offre, puoi scrivere i tuoi validatori personalizzati e collegarli esattamente allo stesso modo dei validatori incorporati. Quindi, per esempio, puoi controllare se ($ form-> isValid()) e poi inviare i messaggi di errore più se si desidera utilizzare $ form-> popolare e inviare il modulo popolato alla vista o inviare un messaggio di successo. – markus

+0

Inoltre, puoi sempre effettuare controlli anche nella vista. Come se ($ form-> hasErrors) mostri questo, altrimenti lo mostri. (! pseudo-code!) – markus

11

Ebbene, dal controller si possono reindirizzare a un'altra azione in un altro controllore:

$this->_forward($newactionname, 
         $newcontrollername, 
         $newmodulename, 
         Array($parameters_to_pass); 
    } 

o semplicemente solo il rendering di un diverso file di visualizzazione:

$this->render('index_alternative'); 
9

Non utilizzare _forward() se si reindirizzano ad azioni nello stesso controllore, basta chiamare l'azione direttamente tramite $ this-> fooAction(), piuttosto che questo -> _ avanti ('foo' .. .

il motivo è la prestazione e gli errori che possono verificarsi a causa del controller in costruzione wtice. Quando si chiama _forward non solo la preDispatch eseguire nuovamente (che è qualcosa da aspettarselo), ma init() e il costruttore anche viene chiamato Se il controller si estende da altri controller, verranno chiamati anche tutti i controller, incluso init(). Se si dispone di codice in init(), verrà eseguito due volte e se si sta scrivendo su un database scriverà la linea due volte! Evita il tutto e ca Lancia direttamente l'azione e usa $ this-> render().

È possibile visualizzare facilmente questo problema se si profila il codice,

+0

+1 amico, non posso credere che tharkun abbia detto di reindirizzare. :/ –

+0

+1, tocco questo! – Marecky

Problemi correlati