如何使用Yii :: app() - > end()方法,它与exit()有什么不同?

时间:2012-05-14 02:29:34

标签: php yii exit

在表单验证中,我找到了这样的代码

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

手册说end()方法将终止应用程序。 为什么要终止应用?以下代码不会执行?

2 个答案:

答案 0 :(得分:19)

是的,这是一个Ajax请求,代码应该返回验证结果,然后停止代码执行。它与Php die函数的想法相同,但允许Yii运行onApplicationEnd清理代码(如果有的话)

答案 1 :(得分:3)

简单地说,它只是终止了应用程序。它与php exit()的区别在于它在退出之前调用了onEndRequest()

尽管如此,文档说status参数0表示正常退出,而其他值表示异常退出,但不是这样实现的。 status参数只是传递给exit()函数(当然输出它!)。

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

偶数对象可以输出如下:

Yii::app()->end(json_encode($data), 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);
}