Yii provides a complete error handling mechanism based on PHP5 exception handling. When an application starts running and handles user requests, the handleError method is registered to handle PHP warnings and notices information; the handleException method is also registered to handle uncaught PHP exceptions. Therefore, if a PHP warning/notice or an uncaught PHP exception occurs while the application is running, the error handler will take over control and run the necessary handling mechanisms.
Tips: The error handler is registered in the constructor method of the application, using the PHP functions set_exception_handler and set_error_handler. If you don't want Yii to handle errors and exceptions, you can define
YII_ENABLE_ERROR_HANDLER
andYII_ENABLE_EXCEPTION_HANDLER
as false in the entry file.
By default, in When the onError event (or onException event) is triggered, the errorHandler (or exceptionHandler) will be triggered. If the error or exception is not handled by any event, then you need to run the errorHandler component to handle it.
Raising exceptions in Yii is no different from ordinary PHP files. You can use the following code to throw an exception:
throw new ExceptionClass('错误信息');
Yii defines two exception classes: CException and CHttpException . The former is a general exception class, while the latter is used to display exception information to end users. At the same time, the latter has a statusCode attribute to represent the HTTP status code. The type of exception determines the display effect, which will be discussed in detail below.
Tips: If you want to tell the user that a certain operation is wrong, throwing a CHttpException is the easiest way. For example, if the user provides an invalid ID value in the URL, we can display a 404 error:
// 如果提交的ID是无效的 throw new CHttpException(404,'此页面不存在');
When an error is forwarded to the component CErrorHandler, it will select the appropriate view to display the error. If the error is to be displayed to the end user (for example, a CHttpException) then a view named errorXXX
will be used to display the error. This XXX
represents the HTTP error code (such as 400, 404, 500, etc.). If this is an internal error that should only be visible to developers, the view name that will be used is exception
. In the latter case, the complete call stack information and error line information will be displayed.
Information: When the application is running in production mode, all errors, including internal errors, will use view
errorXXX
. This is because the call stack information and error line information may contain some sensitive information. In this case, developers should rely on error logs to determine the cause of the error.
CErrorHandler will search for the appropriate view to display the error message. The search order is as follows:
##WebRoot/themes/ThemeName/views/system: In the
system directory under the current theme view.
WebRoot/protected/views/system: In the
system directory of the application's default view.
yii/framework/views: In the standard view directory provided by Yii.
system view directory or the theme's
system view directory A view file. Each view file is a regular PHP file containing a lot of HTML code. Refer to the files in the
view directory of the framework for more information.
return array( ...... 'components'=>array( 'errorHandler'=>array( 'errorAction'=>'site/error', ), ), );
site/error. This route points to
error in
SiteController. Of course, you can also use other routes.
error action like this:
public function actionError() { if($error=Yii::app()->errorHandler->error) $this->render('error', $error); }
error view. The information returned by CErrorHandler::error is an array with the following structure:
code: HTTP status code (such as 403, 500);
type: Error type (such as CHttpException,
PHP Error);
message: Error message;
file: The name of the PHP file where the error occurred;
line: The line where the error is located;
trace: Error call stack information;
source : The context of the code where the error occurred.
Tip: The reason why we check whether CErrorHandler::error is empty is that the
error
action can be accessed by the user. At this time, it may not be possible. Nothing wrong. When we pass the$error
array to the view, it will be automatically released as an independent variable. Therefore, in the view we can use$code
,$type
to access this information.
An error
level error message will be recorded when an error occurs. If the error is caused by a PHP warning or notice, the message will be logged in the php
category; if the error message is caused by an uncaught exception, the category will be exception.ExceptionClassName
(For CHttpException, its statusCode will also be appended to the class name). Developers can use these records to monitor error messages during application execution
The above is Yii Framework Official Guide Series 46 - Special Topic: Error Handling. For more related content, please pay attention to the PHP Chinese website (www.php .cn)!