2012-05-14 16 views
10

Ở dạng phê chuẩn, tôi thấy mã nhưCách sử dụng phương thức Yii :: app() -> end() và cách khác với exit()?

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

Tài liệu hướng dẫn nói rằng phương pháp end() sẽ chấm dứt việc áp dụng. Tại sao phải chấm dứt ứng dụng? Các mã sau sẽ không thực thi?

+0

Nếu đây giúp, Tôi đánh giá cao một Answer. Cảm ơn! – acorncom

+0

Hmm, làm cho câu trả lời đó được chấp nhận. Nó giúp danh tiếng của bạn và của tôi. Cám ơn! – acorncom

Trả lời

17

Có, đó là yêu cầu Ajax và mã được cho là trả lại kết quả xác thực và sau đó dừng thực thi mã. Đó là ý tưởng tương tự như chức năng Php die, nhưng cho phép Yii chạy trên ứng dụngMã dọn dẹp (nếu có)

+0

Cảm ơn câu trả lời của bạn! – Chris

+0

Và mã nào khác sẽ chạy khi hành động kết thúc? Ứng dụng chết anyway. Hoặc là? – Racky

+0

@racky xem câu trả lời của tôi. Có thể có hành vi cho ứng dụng thực hiện những việc khác, chẳng hạn như ghi nhật ký, dọn dẹp cơ sở dữ liệu, v.v. – acorncom

2

Nói đơn giản, nó chỉ chấm dứt ứng dụng. Điều gì làm cho nó khác với php exit() là nó gọi là onEndRequest() trước khi thoát.

Mặc dù tài liệu có thông số status 0 có nghĩa là thoát bình thường trong khi các giá trị khác có nghĩa là thoát bất thường, nó không được thực hiện như vậy. Tham số status chỉ đơn giản là được chuyển đến hàm exit() (mà đầu ra nó tất nhiên!).

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

Ngay cả đối tượng có thể được xuất ra như sau:

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

Lưu ý: (1) onEndRequest() được nâng lên ngay sau khi ứng dụng xử lý yêu cầu. Chức năng này có thể được sử dụng để nhắc nhật ký và các chức năng hữu ích khác.

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); 
} 
Các vấn đề liên quan