Zend_Form può essere visualizzato in diversi punti. Non può essere considerato affatto come parte di un solo strato di pattern MVC.
Prima di tutto Zend_Form utilizza i decoratori e visualizza gli helper per rendere il modulo, a questo punto fa parte del livello di vista. Quindi, Zend_Form fa parte del lavoro di modello che filtra e convalida il contenuto.
Sappiamo che il livello Controller esegue il rendering dell'input dalla vista e lo passa al modello. In realtà, il livello del controller decide quale risorsa caricare dal livello del modello e quindi esegue le chiamate corregge.
Quando si chiama Zend_Form dal livello controller, è possibile considerare che si sta chiamando una risorsa modello per eseguire le azioni di valutazione e filtraggio e decidere se questo è un input valido. Per esempio:
public function newAction()
{
$form = $this->getForm();
if($this->getRequest()->isPost())
{
$formData = $this->_request->getPost();
if($form->isValid($formData))
{
$Model = $this->getModel();
$id = $Model->insert($form->getValues());
}
}
$this->view->form = $form;
}
Tie forme al modello può essere considerato un buon pratice perché quando si esegue azioni di filtraggio e di convalida si è in livello di modello.Così, come Matthew proposto:
class Model_DbTable_Users extends Zend_Db_Table
{
protected $_name = 'users';
protected $_form;
public function getForm()
{
if(!$this->_form)
$this->_form = new Form_User();
return $this->_form;
}
public function add($data)
{
$form = $this->getForm();
if(!$form->isValid($data)) return false;
if($form->getValue('id'))
{
$id = (int) $form->getValue('id');
$this->update($form->getValues(), 'id =' . $id);
}
else
{
$id = $this->insert($form->getValues());
}
return $id;
}
}
Dalla struttura di directory standard possiamo vedere che forme non sono nella cartella del modello né nella cartella vista perché Zend_Form è una classe specifica che legano molte risorse e strati insieme. Se controlli il post di Matthews ti renderai conto che questo è esattamente ciò che viene detto quando l'URL azione è impostato sullo script di visualizzazione e il modulo è legato al modello.
Infine, è possibile analizzare il contesto e prendere uno di questi due approcci.
Attualmente, la mia scelta è quella di legare i moduli ai modelli. Sembra bello! E ha molto senso per me.
fonte
2010-10-25 19:38:25