Non so se ci sono altre strade ma a me ne viene in mente una semplice. Tutti i controller estendono il componente protected/controllers/Controller.php Al suo interno puoi creare un metodo chiamato init che controlli se nella configurazione il parametro "in_manutenzione" è true o false.
perchè catchAllRequest riesco a farlo funzionare solo se lo imposto nel file di configurazione? e non nel controller principale che estende CController? con questa chiamata Yii::app()->catchAllRequest
nel file di config non posso controllare il valore del parametro manutenzione… l’unica cosa è controllarlo come dici te nel controller… ma non posso modificare il catchAllRequest…
fatto creando un controller chiamato manutenzione e nel controller principale che estende il CController ho messo:
public function init(){
if(Yii::app()->params['manutenzione']){
if(Yii::app()->controller->id != "manutenzione") $this->redirect(array('manutenzione/index'));
}
}
Studiati i behavior di Yii perchè sono una cosa molto interessante che ti sarà molto utile per esempio quando inizierai ad imbatterti nelle date. Infatti il db le memorizza nel formato 0000-00-00 00-00-00 e tu magari vuoi sempre mostrarle nel formato dd/mm/yyyy. O implementi per ogni modello la conversione, oppure scrivi un behavior che "attacchi" agli attributi di dutti i modelli che hanno una data.
è una feature molto interessante che ti permette, come ti suggeriva sensorario, di avere per l’appunto dei comportamenti a livello globale sull’intera app.
io ad esempio tempo fa chiesi sul forum come poter controllare, a livello di applicazione globale, un parametro.
all’inizio il suggerimento fu quello di estendere CController, ma quando poi mi sono imbattuto nei behavior, ho cambiato strategia.
Qui due casi di utilizzo pratico, uno di un utente del forum italiano