2012-05-14 17 views
10

は、私はそのようなコードを見つけるYii :: app() - > end()メソッドの使い方とexit()との違いは?フォームの検証において

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

マニュアルは、エンド()メソッドは、アプリケーションを終了するとしています。 なぜアプリを終了するのですか?次のコードは実行されませんか?

+0

これが助けた場合、私は投票をいただければと思います。ありがとう! – acorncom

+0

ええと、受け入れられた答えにしてください。それはあなたの評判と私の助けになります。どうも! – acorncom

答えて

17

はい、Ajaxリクエストであり、コードは検証結果を返してからコード実行を停止することになっています。これはPHPダイ機能と同じ考えですが、アプリケーション終了クリーンアップコード(もしあれば)でYiiを実行できるようにします。

+0

あなたの答えをありがとう! – Chris

+0

アクションが完了したら、他のコードは実行されますか?アプリケーションはとにかく死ぬ。または? – Racky

+0

@racky私の答えを見てください。アプリケーション間でYii :: app() - > end()が発生した場合、onApplicationEndの間に自動的にロールバックされますか? – acorncom

2

単にアプリケーションを終了するだけです。それがPHPのexit()と異なる点は、終了する前にonEndRequest()を呼び出すことです。

ドキュメントでは、statusパラメータ0は通常の終了を意味し、他の値は異常終了を意味しますが、そのようには実行されません。 statusパラメータは単にexit()関数に渡されます(これはもちろん出力されます)。

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

注:

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

さえオブジェクトは以下のように出力することができる(1)onEndRequest()は、アプリケーションが要求を処理した直後に上昇します。この機能を使用して、ログやその他の便利な機能をプロンプトすることができます。

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); 
} 
関連する問題