Blame view

vendor/yiisoft/yii2/console/ErrorHandler.php 3.31 KB
abf1649b   andryeyev   Чистая установка ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  <?php
  /**
   * @link http://www.yiiframework.com/
   * @copyright Copyright (c) 2008 Yii Software LLC
   * @license http://www.yiiframework.com/license/
   */
  
  namespace yii\console;
  
  use Yii;
  use yii\base\ErrorException;
  use yii\base\UserException;
  use yii\helpers\Console;
  
  /**
   * ErrorHandler handles uncaught PHP errors and exceptions.
   *
   * ErrorHandler is configured as an application component in [[\yii\base\Application]] by default.
   * You can access that instance via `Yii::$app->errorHandler`.
   *
   * @author Carsten Brandt <mail@cebe.cc>
   * @since 2.0
   */
  class ErrorHandler extends \yii\base\ErrorHandler
  {
      /**
       * Renders an exception using ansi format for console output.
       * @param \Exception $exception the exception to be rendered.
       */
      protected function renderException($exception)
      {
          if ($exception instanceof Exception && ($exception instanceof UserException || !YII_DEBUG)) {
              $message = $this->formatMessage($exception->getName() . ': ') . $exception->getMessage();
          } elseif (YII_DEBUG) {
              if ($exception instanceof Exception) {
                  $message = $this->formatMessage("Exception ({$exception->getName()})");
              } elseif ($exception instanceof ErrorException) {
                  $message = $this->formatMessage($exception->getName());
              } else {
                  $message = $this->formatMessage('Exception');
              }
              $message .= $this->formatMessage(" '" . get_class($exception) . "'", [Console::BOLD, Console::FG_BLUE])
                  . " with message " . $this->formatMessage("'{$exception->getMessage()}'", [Console::BOLD]) //. "\n"
                  . "\n\nin " . dirname($exception->getFile()) . DIRECTORY_SEPARATOR . $this->formatMessage(basename($exception->getFile()), [Console::BOLD])
                  . ':' . $this->formatMessage($exception->getLine(), [Console::BOLD, Console::FG_YELLOW]) . "\n";
              if ($exception instanceof \yii\db\Exception && !empty($exception->errorInfo)) {
                  $message .= "\n" . $this->formatMessage("Error Info:\n", [Console::BOLD]) . print_r($exception->errorInfo, true);
              }
              $message .= "\n" . $this->formatMessage("Stack trace:\n", [Console::BOLD]) . $exception->getTraceAsString();
          } else {
              $message = $this->formatMessage('Error: ') . $exception->getMessage();
          }
  
          if (PHP_SAPI === 'cli') {
              Console::stderr($message . "\n");
          } else {
              echo $message . "\n";
          }
      }
  
      /**
       * Colorizes a message for console output.
       * @param string $message the message to colorize.
       * @param array $format the message format.
       * @return string the colorized message.
       * @see Console::ansiFormat() for details on how to specify the message format.
       */
      protected function formatMessage($message, $format = [Console::FG_RED, Console::BOLD])
      {
          $stream = (PHP_SAPI === 'cli') ? \STDERR : \STDOUT;
          // try controller first to allow check for --color switch
          if (Yii::$app->controller instanceof \yii\console\Controller && Yii::$app->controller->isColorEnabled($stream)
              || Yii::$app instanceof \yii\console\Application && Console::streamSupportsAnsiColors($stream)) {
              $message = Console::ansiFormat($message, $format);
          }
          return $message;
      }
  }