1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?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 UnknownCommandException) {
- // display message and suggest alternatives in case of unknown command
- $message = $this->formatMessage($exception->getName() . ': ') . $exception->command;
- $alternatives = $exception->getSuggestedAlternatives();
- if (count($alternatives) === 1) {
- $message .= "\n\nDid you mean \"" . reset($alternatives) . '"?';
- } elseif (count($alternatives) > 1) {
- $message .= "\n\nDid you mean one of these?\n - " . implode("\n - ", $alternatives);
- }
- } elseif ($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;
- }
- }
|