usereste delle attivita di Model dentro a Form?

Ciao ragazzi,

vi propongo una questione sull'opportunità di implementare una soluzione o meno.

se la validazione di un Zend_Form_Element  richiedesse una interazione con un Model, il codice che interagische col vostro Model lo mettereste (con le opportune attenzioni) dentro la funzione isValid() della Vostra Form? O lo riservereste ai vari controller dove la form viene usata?

Ho ragione di ritenere (ora ci provo poi magari vi dico) che funzionerebbe anche dentro la funzione isValid() della Form e sarebbe sicuramente più comoda da manutenere ma in questo caso, sarei in sintonia col paradigma MVC?

secondo voi Zend_Form nel pattern MVC è parte del View o del Controller?

inviato 5 anni fa
fabio.pellati
X 0 X

Io creerei un validator a parte da richiamare nel mio form.

L'oggetto form è richiamato dal controller che poi lo invia alla view per la visualizzazione.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Ciao MarioS,

il validator opera in autonomia, come faccio a passargli il model da usare?

cioè se definisco un validator

class Myapp_Validate_campoUnivoco extends Zend_Validate_Abstract{
.......

il quale deve interagire con un model che espone una public function che svolge le query necessarie e resituisce alcuni stati (es. return false,  "esiste", "esiste_1", "esiste_2" ecc) e si comporta di conseguenza

nella definizione della Form metto

$codice_fiscale = new Zend_Form_Element_Text( "codice_fiscale", Array(
                'validators'    =>Array('campoUnivoco')
                 )
             );

a questo punto però, il validator non sa quale sarà la form che lo chiamerà e la form non sa quale sarà il model nel quale cercare. l'unico a conoscere il model è il controller.

preparo una cascata di chiamate a __constructor per passare una variabile contenente un'istanza del model?

la intendi così?

vista così potrebbe anche funzionare.

risposto 5 anni fa
fabio.pellati
X 0 X

Come esempio prendi gli oggetti Zend_Validate_Db_RecordExists e Db_NoRecordExists.

http://framework.zend.com/manual/en/zend.validate.set.html

Guarda nel loro codice, da la puoi creare il tuo oggetto figlio.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Confermo che la soluzione indicata da MarioS funziona.

per il mio caso non è funzionale al 100% ma è pulita.

quello che nel mio caso non completa le mie necessità è che in caso di isValid=false devo spedire al browser il frutto di una $view->partial(...) che vado comunque gestire a livello di controller,  quindi parte del lavoro che volevo demandare al Validator rimane comunque nel controller. Ma è un limite da poco

grazie MarioS

risposto 5 anni fa
fabio.pellati
X 0 X

Non è il validator che deve mandare una view, ma il controller, appunto. Il Validator deve solo dire se è valida o meno una affermazione.

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda