2012-05-14 5 views
10

In forma di convalida, trovo tali codiciCome utilizzare il metodo Yii :: app() -> end() e in che modo è diverso da exit()?

if(isset($_POST['ajax']) && $_POST['ajax']==='login-form') 
    { 
     echo CActiveForm::validate($model); 
     Yii::app()->end(); 
    } 

il manuale dice che il metodo end() terminerà l'applicazione. Perché terminare l'app? I seguenti codici non verranno eseguiti?

+0

Se questo ha aiutato, mi farebbe piacere un up votazione. Grazie! – acorncom

+0

Hmm, fallo una risposta accettata. Aiuta la tua reputazione e la mia. Grazie! – acorncom

risposta

17

Sì, è una richiesta Ajax e il codice deve restituire i risultati della convalida e quindi interrompere l'esecuzione del codice. È la stessa idea della funzione Php die, ma consente a Yii di eseguire onApplicationEnd codice di pulizia (se presente)

+0

Grazie per la tua risposta! – Chris

+0

E quale altro codice verrebbe eseguito al termine dell'azione? L'applicazione muore comunque. O? – Racky

+0

@racky vedi la mia risposta. È possibile avere comportamenti per l'app che eseguono altre operazioni, quali registrazione, pulizia del database, ecc. – acorncom

2

Semplicemente dicendo, termina semplicemente l'applicazione. Ciò che lo rende diverso da exit() di php è che chiama lo onEndRequest() prima di uscire.

Anche se la documentazione dice status parametro 0 significa uscita normale mentre altri valori indicano uscita anomala, non è praticata come tale. Il parametro status viene semplicemente passato alla funzione exit() (che ovviamente la stampa in uscita!).

Yii::app()->end('saved', true); 

Anche gli oggetti possono essere emessi come di seguito:

Yii::app()->end(json_encode($data), true); 

Nota: (1) onEndRequest() viene sollevato dopo l'applicazione elabora la richiesta. Questa funzione può essere utilizzata per richiedere registri e altre funzioni utili.

Yii Documentation of end()

/** 
* Terminates the application. 
* This method replaces PHP's exit() function by calling 
* {@link onEndRequest} before exiting. 
* @param integer $status exit status (value 0 means normal exit while other values mean abnormal exit). 
* @param boolean $exit whether to exit the current request. This parameter has been available since version 1.1.5. 
* It defaults to true, meaning the PHP's exit() function will be called at the end of this method. 
*/ 

public function end($status=0,$exit=true) 
{ 
if($this->hasEventHandler('onEndRequest')) 
$this->onEndRequest(new CEvent($this)); 
if($exit) 
exit($status); 
}