Gestire Le Varie Pagine Di Errore

ho matto un controller chiamato error.

All’interno ho la funzione actionError (correttamente richiamata all’interno del file di configurazione main.php).

all’interno del metodo ho:




$error=Yii::app()->errorHandler->error;

if($error) $this->render('index', $error);



fino a qui tutto ok. funziona.

Solo che io voglio richiamare la pagina error404.php per gli errori 404, pagina error500.php per gli errori 500… e cosi via…

come fa il framework yii di suo.

ho copiato i file view di yii dentro alla cartella fatta da me "error".

Quindi all’interno ho:

error404.php

error500.php

ecc ecc tutte quelle di yii che sono 12.

ora come faccio dentro al mio controller a richiamare la pagina giusta in base al tipo di errore?

Hai seguito questa guida?

questa la mia actionError per avere view differenziate per il tipo di errore.




public function actionError()

{

	 if($error = Yii::app()->errorHandler->error)

	 {

    	 if($app->request->isAjaxRequest)

           echo $error['message'];

	 else

	 //$this->render('error', $error);

    	 $this->render( 'error' . ($this->getViewFile('error'.$error['code']) ? $error['code'] : '' ), $error );

	 }

}



si visto quella pagina. Ma li usa 1 sola pagina di errore in cui il testo cambia in base all’errore.

A me serve avere una pagina diversa per ogni tipo di errore.

Tipo la pagina per il 404 ha solo 1 immagine in centro.

Quella del 500 ha del testo…

ecc ecc

quindi avere un file php per ognuno

dopo la provo. Me la potresti spiegare per favore? solo l’ultima riga che è quella che fa tutto il lavoro. grazie

fa quello che richiedi tu.

se genero un’eccezione con codice 404




throw new CHttpException(404,'Nessuna pagina trovata');



nell’actionError, al posto di visualizzare la view error come nella riga commentata,

controllo se esiste un file view error404, e lo visualizzo altrimenti visualizzo la normale view error




//$this->render('error', $error);

$this->render( 'error' . ($this->getViewFile('error'.$error['code']) ? $error['code'] : '' ), $error );



ok grazie ora provo