Zend: Esegui qualcosa prima viene eseguito un controllo
-
28-09-2019 - |
Domanda
Nel mio progetto Zend Framework voglio verificare se un cookie è impostato. Se è il caso che voglio utilizzare i contenuti dei cookie per il login di un utente.
Dal momento che è neccessary per me fare questo accesso automatico prima di qualsiasi controller è chiamato ho provato a metterlo in Bootstrap. Ci voglio controllare il database se le informazioni utente è valido. Purtroppo a questo punto l'adattatore database predefinito non è ancora inizializzato.
Quindi la mia domanda è la seguente: Dove posso mettere quelle cose che dovrebbe essere eseguito prima di qualsiasi controller è chiamato e dopo tutto inizializzazione / roba bootstrapping è fatto?
Soluzione
I'have non una grande esperienza con Zend Framework, ma penso che si dovrebbe creare un controller generica personalizzato per esempio GenericController che estende la Zend_Controller_Action e inserire il codice nella funzione preDispatch (). Tutti i controller sarà quindi una sottoclasse del controller personalizzato, ad esempio:
class GenericController extends Zend_Controller_Action{
function preDispatch(){
parent::preDispatch();
// put your code here
}
}
class FooController extends GenericController{
...
}
Altri suggerimenti
Utilizzare i metodi:
init()
// and
preDispatch()
li implementare nella tua classe, corre init al creazione, preDispatch corre a destra prima del tuo metodo di azione IIRC
In quella pagina ho linkato sopra afferma
Nota: L'utilizzo di init () vs. preDispatch () Nel paragrafo precedente, abbiamo introdotto il metodo init (), e il metodo di questa sezione, il preDispatch (). Qual è la differenza tra loro, e quali azioni vuoi prendere in ciascuna? Il metodo init () è destinato principalmente per estendere il costruttore. In genere, il costruttore deve semplicemente impostare lo stato oggetto, e non eseguire molto logica. Ciò potrebbe includere inizializzazione risorse utilizzate nel controller (come modelli, oggetti di configurazione, ecc) o assegnando valori recuperati dal front controller, bootstrap, o un registro. Il metodo preDispatch () può essere utilizzato anche per oggetto set o ambientale (ad esempio, vista, l'azione di supporto, ecc) dello stato, ma il suo scopo primario è quello di prendere decisioni circa se o non l'azione richiesta deve essere inviato. In caso contrario, si dovrebbe quindi _forward () per un'altra azione, o un'eccezione. Nota: _forward () in realtà non funziona correttamente quando eseguito da init (), che è una formalizzazione delle intenzioni dei due metodi.