123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- <?php
- namespace yii\web;
- use Yii;
- use yii\base\Action;
- use yii\base\Exception;
- use yii\base\UserException;
- class ErrorAction extends Action
- {
-
- public $view;
-
- public $defaultName;
-
- public $defaultMessage;
-
- public $layout;
-
- protected $exception;
-
- public function init()
- {
- $this->exception = $this->findException();
- if ($this->defaultMessage === null) {
- $this->defaultMessage = Yii::t('yii', 'An internal server error occurred.');
- }
- if ($this->defaultName === null) {
- $this->defaultName = Yii::t('yii', 'Error');
- }
- }
-
- public function run()
- {
- if ($this->layout !== null) {
- $this->controller->layout = $this->layout;
- }
- Yii::$app->getResponse()->setStatusCodeByException($this->exception);
- if (Yii::$app->getRequest()->getIsAjax()) {
- return $this->renderAjaxResponse();
- }
- return $this->renderHtmlResponse();
- }
-
- protected function renderAjaxResponse()
- {
- return $this->getExceptionName() . ': ' . $this->getExceptionMessage();
- }
-
- protected function renderHtmlResponse()
- {
- return $this->controller->render($this->view ?: $this->id, $this->getViewRenderParams());
- }
-
- protected function getViewRenderParams()
- {
- return [
- 'name' => $this->getExceptionName(),
- 'message' => $this->getExceptionMessage(),
- 'exception' => $this->exception,
- ];
- }
-
- protected function findException()
- {
- if (($exception = Yii::$app->getErrorHandler()->exception) === null) {
- $exception = new NotFoundHttpException(Yii::t('yii', 'Page not found.'));
- }
- return $exception;
- }
-
- protected function getExceptionCode()
- {
- if ($this->exception instanceof HttpException) {
- return $this->exception->statusCode;
- }
- return $this->exception->getCode();
- }
-
- protected function getExceptionName()
- {
- if ($this->exception instanceof Exception) {
- $name = $this->exception->getName();
- } else {
- $name = $this->defaultName;
- }
- if ($code = $this->getExceptionCode()) {
- $name .= " (#$code)";
- }
- return $name;
- }
-
- protected function getExceptionMessage()
- {
- if ($this->exception instanceof UserException) {
- return $this->exception->getMessage();
- }
- return $this->defaultMessage;
- }
- }
|