5

Esiste un modo affidabile per creare una visualizzazione personalizzata per un Zend_Form? I decoratori sono piuttosto criptici e usarli in modi fantasiosi a volte è così complicato che preferirei semplicemente scrivere l'HTML a mano. C'è un modo per farlo e rendere il modulo completamente compatibile con il controller (ad esempio chiamare $form->isValid() e aspettarsi che tutto si convalidi correttamente)? Se è così, ci sono dei caveat a cui prestare attenzione (come fare attenzione alla visualizzazione degli errori di validazione)?Creazione di una vista modulo in Zend

La soluzione ideale sarebbe quella di creare un modulo e passare l'array di elementi (contenente i dati necessari come nomi, ID, tipi di input e tutto il necessario per il rendering dell'HTML) - Zend Framework lo consente?

[EDIT]

Invece di limitarsi a echo ing l'oggetto modulo, ho provato ad aggiungere questo codice nella visualizzazione (un semplice form di login):

<?php 
$userid = $this->form->getElement('userid'); 
$pass = $this->form->getElement('password'); 
$remember = $this->form->getElement('remember'); 
$submit = $this->form->getElement('submit'); 
?> 
<form enctype="<?php echo $this->form->getEnctype(); ?>" method="<?php echo $this->form->getMethod(); ?>" action="<?php echo $this->form->getAction(); ?>" id="<?php echo $this->form->getId(); ?>"> 
name: <input type="text" id="<?php echo $userid->getId(); ?>" name="<?php echo $userid->getName(); ?>" /><br /> 
pass: <input type="password" id="<?php echo $pass->getId(); ?>" name="<?php echo $pass->getName(); ?>" /><br /> 
remember: <input type="checkbox" id="<?php echo $remember->getId(); ?>" name="<?php echo $remember->getName(); ?>" /><br /> 
submit: <input type="submit" id="<?php echo $submit->getId(); ?>" name="<?php echo $submit->getName(); ?>" value="<?php echo $submit->getValue(); ?>" /> 
</form> 

La forma sembra funzionare OK e convalidare (anche se non riesco a reindirizzare la pagina da cui provengo - ma questo è un problema diverso, credo, mentre lo passo tramite lo GET, non nel modulo). È accettabile, o sto facendo qualcosa di terribilmente sbagliato senza saperlo?

+0

È possibile popolare zend_forms con dati utilizzando $ form-> popolare ($ data) ; – Marcin

+0

Non intendo popolarli con i dati, voglio dire scrivere il mio HTML, senza ricorrere all'utilizzo di quei terribili e terribili decoratori. – mingos

+0

È un metodo disordinato, ed è per questo che non lo invierò come risposta, ma come suggerito da Marcin, puoi ancora scrivere il tuo modulo in una vista, con gli stessi identici ID, e scrivere il tuo modulo con Zend_Form, e popola quindi per usare filtri, validatori, ecc ... Puoi anche usare filtri e validatori standalone senza usare Zend_Form, in pratica è come usare Zend_Form senza il modulo generato. Ma il miglior consiglio è ancora: immergiti nei decoratori;) –

risposta

2

Molto dipende dal design e dal layout finale.

Dove si desidera visualizzare gli errori di convalida? Come? Via decoratore di errori?
Vuoi usare anche le descrizioni?
Hai bisogno di usare altri decoratori?

Il modo migliore sembra essere quello di creare solo il proprio elemento Zend_Form_Element_ThreadIcons. Questo è facile come la sottoclasse di uno degli elementi Zend_Form e l'implementazione del metodo personalizzato _render() che restituisce l'HTML necessario. È possibile utilizzare anche la propria istanza View.

Quindi è possibile passare la matrice di icone come opzione di elemento e gestirla nel modo desiderato.

Se si decide di utilizzare decoratori, è il mio trovato questa presentazione molto utile per padroneggiare la tecnica:

+0

Mi piace questa soluzione. Sarò di nuovo al lavoro lunedì, quindi controllerò quindi :). – mingos