You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					109 lines
				
				2.8 KiB
			
		
		
			
		
	
	
					109 lines
				
				2.8 KiB
			| 
											12 years ago
										 | <?php
 | ||
|  | /**
 | ||
|  |  * @link http://www.yiiframework.com/
 | ||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC
 | ||
|  |  * @license http://www.yiiframework.com/license/
 | ||
|  |  */
 | ||
|  | 
 | ||
|  | namespace yii\web;
 | ||
|  | 
 | ||
|  | use Yii;
 | ||
|  | use yii\base\Action;
 | ||
|  | use yii\base\Exception;
 | ||
|  | use yii\base\UserException;
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * ErrorAction displays application errors using a specified view.
 | ||
|  |  *
 | ||
|  |  * To use ErrorAction, you need to do the following steps:
 | ||
|  |  *
 | ||
|  |  * First, declare an action of ErrorAction type in the `actions()` method of your `SiteController`
 | ||
|  |  * class (or whatever controller you prefer), like the following:
 | ||
|  |  *
 | ||
|  |  * ```php
 | ||
|  |  * public function actions()
 | ||
|  |  * {
 | ||
|  |  *     return array(
 | ||
|  |  *         'error' => array(
 | ||
|  |  *             'class' => 'yii\web\ErrorAction',
 | ||
|  |  *         ),
 | ||
|  |  *     );
 | ||
|  |  * }
 | ||
|  |  * ```
 | ||
|  |  *
 | ||
|  |  * Then, create a view file for this action. If the route of your error action is `site/error`, then
 | ||
|  |  * the view file should be `views/site/error.php`. In this view file, the following variables are available:
 | ||
|  |  *
 | ||
|  |  * - `$name`: the error name
 | ||
|  |  * - `$message`: the error message
 | ||
|  |  * - `$exception`: the exception being handled
 | ||
|  |  *
 | ||
|  |  * Finally, configure the "errorHandler" application component as follows,
 | ||
|  |  *
 | ||
|  |  * ```php
 | ||
|  |  * 'errorHandler' => array(
 | ||
|  |  *     'errorAction' => 'site/error',
 | ||
|  |  * )
 | ||
|  |  * ```
 | ||
|  |  *
 | ||
|  |  * @author Qiang Xue <qiang.xue@gmail.com>
 | ||
|  |  * @since 2.0
 | ||
|  |  */
 | ||
|  | class ErrorAction extends Action
 | ||
|  | {
 | ||
|  | 	/**
 | ||
|  | 	 * @var string the view file to be rendered. If not set, it will take the value of [[id]].
 | ||
|  | 	 * That means, if you name the action as "error" in "SiteController", then the view name
 | ||
|  | 	 * would be "error", and the corresponding view file would be "views/site/error.php".
 | ||
|  | 	 */
 | ||
|  | 	public $view;
 | ||
|  | 	/**
 | ||
|  | 	 * @var string the name of the error when the exception name cannot be determined.
 | ||
|  | 	 * Defaults to "Error".
 | ||
|  | 	 */
 | ||
|  | 	public $defaultName;
 | ||
|  | 	/**
 | ||
|  | 	 * @var string the message to be displayed when the exception message contains sensitive information.
 | ||
|  | 	 * Defaults to "An internal server error occurred.".
 | ||
|  | 	 */
 | ||
|  | 	public $defaultMessage;
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	public function run()
 | ||
|  | 	{
 | ||
|  | 		if (!($exception = Yii::$app->getErrorHandler()->exception)) {
 | ||
|  | 			return '';
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		if ($exception instanceof HttpException) {
 | ||
|  | 			$code = $exception->statusCode;
 | ||
|  | 		} else {
 | ||
|  | 			$code = $exception->getCode();
 | ||
|  | 		}
 | ||
|  | 		if ($exception instanceof Exception) {
 | ||
|  | 			$name = $exception->getName();
 | ||
|  | 		} else {
 | ||
|  | 			$name = $this->defaultName ?: Yii::t('yii', 'Error');
 | ||
|  | 		}
 | ||
|  | 		if ($code) {
 | ||
|  | 			$name .= " (#$code)";
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		if ($exception instanceof UserException) {
 | ||
|  | 			$message = $exception->getMessage();
 | ||
|  | 		} else {
 | ||
|  | 			$message = $this->defaultMessage ?: Yii::t('yii', 'An internal server error occurred.');
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		if (Yii::$app->getRequest()->getIsAjax()) {
 | ||
|  | 			return "$name: $message";
 | ||
|  | 		} else {
 | ||
|  | 			return $this->controller->render($this->view ?: $this->id, array(
 | ||
|  | 				'name' => $name,
 | ||
|  | 				'message' => $message,
 | ||
|  | 				'exception' => $exception,
 | ||
|  | 			));
 | ||
|  | 		}
 | ||
|  | 	}
 | ||
|  | }
 |