Подтвердить что ты не робот

Как использовать метод Yii:: app() → end() и как он отличается от exit()?

В форме проверки я нахожу такие коды

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

В руководстве говорится, что метод end() завершит приложение. Зачем прекращать приложение? Следующие коды не будут выполняться?

4b9b3361

Ответ 1

Да, это Ajax-запрос, и код должен возвращать результаты проверки, а затем останавливать выполнение кода. Это та же идея, что и функция Php die, но позволяет Yii запускать onApplicationEnd код очистки (если есть)

Ответ 2

Просто говоря, он просто прекращает работу приложения. Что отличает его от 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 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);
}