Ответ 1
Да, это Ajax-запрос, и код должен возвращать результаты проверки, а затем останавливать выполнение кода. Это та же идея, что и функция Php die, но позволяет Yii запускать onApplicationEnd код очистки (если есть)
В форме проверки я нахожу такие коды
if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
В руководстве говорится, что метод end() завершит приложение. Зачем прекращать приложение? Следующие коды не будут выполняться?
Да, это Ajax-запрос, и код должен возвращать результаты проверки, а затем останавливать выполнение кода. Это та же идея, что и функция Php die, но позволяет Yii запускать onApplicationEnd код очистки (если есть)
Просто говоря, он просто прекращает работу приложения. Что отличает его от php exit()
, так это то, что он вызывает onEndRequest()
перед выходом.
Несмотря на то, что в документации указано status
параметр 0 означает нормальный выход, а другие значения означают ненормальный выход, он не практикуется как таковой. Параметр status
просто передается в функцию exit()
(которая выводит его, конечно!).
Yii::app()->end('saved', true);
Даже объекты могут выводиться следующим образом:
Yii::app()->end(json_encode($data), true);
Примечание: (1) onEndRequest()
возникает сразу после того, как приложение обрабатывает запрос. Эта функция может использоваться для подсказки журналов и других полезных функций.
/**
* Terminates the application.
* This method replaces PHP 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 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);
}