2016-05-05 37 views
6

Nel mio attuale progetto ZF2 ho un complesso Form con più livelli di nidificazione Fieldset s, che riflettono la struttura degli oggetti da salvare sullo sfondo. Attualmente i dati vengono inviati direttamente allo Controller e vengono salvati nel database, se è valido.Come implementare una pagina di anteprima del modulo in Zend Framework 2?

Ora è necessario implementare un passaggio intermedio: l'utente dovrebbe avere la possibilità di verificare i dati di input prima che vengano salvati nel database. Se decide, che è corretto, i dati del modulo devono essere inviati e salvati nel database; se l'utente decide che il modulo deve essere modificato, dovrebbe essere in grado di tornare al modulo e correggerlo. (Naturalmente tutto ciò in un ciclo, fino a quando l'utente è felice con il modulo e inviarlo.)

Ciò significa che è necessaria una pagina di anteprima. Questa pagina/action dovrebbe ottenere i dati e visualizzarli in qualche modo (come tabella o comunque). I dati devono essere memorizzati temporaneamente da qualche parte ed essere pronti per essere "idratati" sull'oggetto Form e salvati. Se l'utente desidera aggiornare il modulo, il modulo deve essere ripristinato.

Come posso implementare questo requisito?

UPDATE

Sto cercando una soluzione server-side. L'anteprima dovrebbe essere una nuova pagina e non un codice HTML generato da JavScript/lato client nella stessa pagina (per il monitoraggio e altri scopi).

+0

Impossibile serializzare gli oggetti e memorizzarli in una sessione. Quindi deselezionare gli oggetti per salvarli nel database dopo che l'utente ha accettato i loro dati. – Garry

+0

Quale oggetto intendi? 'Form'? E dove conservare - nella sessione? – automatix

risposta

0

Direi che la soluzione migliore sarebbe implementare uno script lato client (java) che viene eseguito prima di eseguire la richiesta del modulo POST. È possibile catturare l'evento di invio del modulo e visualizzare una vista laterale del client in cui viene visualizzato lo stato corrente di tutti i campi del modulo (nome e valore). Se l'utente fa clic su accept, continua l'operazione POST. Se l'utente fa clic su Annulla, si ritorna alla visualizzazione del modulo in cui si autorizzano ulteriori modifiche e il tutto si ripete.

Non dovrebbe essere difficile trovare esempi su come fare questo ...

Un esempio è this blog post, ma ci sono molti di più da trovare con the help of Google.

+0

Grazie per la risposta! Beh, teoricamente funzionerebbe, ma con questo approccio avrei bisogno di duplicare tutta la logica di validazione implementata lato server che la reimplemera in JavaScript. – automatix

+0

Hai scritto: * "L'utente dovrebbe avere la possibilità di controllare i dati di input prima che vengano inviati al server, se decide, è corretto, il modulo deve essere inviato e salvato nel database" *, e ciò è possibile senza aggiungere qualsiasi convalida: 1) l'utente controlla il suo input. 2) quando l'utente pensa che tutto vada bene, puoi comunque lasciare che il server faccia il suo lavoro e confermare. Ma se vuoi che il server si convalidi prima che l'utente possa effettivamente scrivere un codice simile per la convalida sul client. Sarebbe più efficiente lasciare che il server faccia tutto il lavoro ad ogni tentativo.La convalida HTML5 può essere utile. – Wilt

+0

@automatix [Esistono alcuni moduli per ZF2] (https://www.google.se/search?q=zf2%20client%20side%20validation) che possono aiutare a integrare la validazione lato client nel progetto. Non ho esperienza di prima mano con nessuno, ma potrebbe valere la pena provare. – Wilt

0

Poiché non so come sia strutturata la tua applicazione/db, posso solo ipotizzare che potresti creare un'altra tabella che conserverebbe dati temporanei o dopo che l'utente ha inviato il modulo e che è convalidato invece di salvarlo in db make tutti i campi sono di sola lettura e sostituiscono il pulsante di invio originale con quello che salverà i dati e quello che restituirà all'utente il modulo in cui può modificare i dati.