15

在表单验证中,我发现了这样的代码

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

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

4

2 回答 2

20

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

于 2012-05-14T03:27:11.933 回答
3

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

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

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

甚至对象可以输出如下:

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

注意:(1)onEndRequest()在应用程序处理请求后立即提出。该功能可用于提示日志等有用的功能。

Yii 文档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);
}
于 2014-10-31T14:36:20.790 回答