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?
È possibile popolare zend_forms con dati utilizzando $ form-> popolare ($ data) ; – Marcin
Non intendo popolarli con i dati, voglio dire scrivere il mio HTML, senza ricorrere all'utilizzo di quei terribili e terribili decoratori. – mingos
È 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;) –