public function Application::renderException in Zircon Profile 8
Same name and namespace in other branches
- 8.0 vendor/symfony/console/Application.php \Symfony\Component\Console\Application::renderException()
Renders a caught exception.
Parameters
\Exception $e An exception instance:
OutputInterface $output An OutputInterface instance:
1 call to Application::renderException()
- Application::run in vendor/
symfony/ console/ Application.php - Runs the current application.
File
- vendor/
symfony/ console/ Application.php, line 632
Class
- Application
- An Application is the container for a collection of commands.
Namespace
Symfony\Component\ConsoleCode
public function renderException($e, $output) {
do {
$title = sprintf(' [%s] ', get_class($e));
$len = $this
->stringWidth($title);
$width = $this
->getTerminalWidth() ? $this
->getTerminalWidth() - 1 : PHP_INT_MAX;
// HHVM only accepts 32 bits integer in str_split, even when PHP_INT_MAX is a 64 bit integer: https://github.com/facebook/hhvm/issues/1327
if (defined('HHVM_VERSION') && $width > 1 << 31) {
$width = 1 << 31;
}
$formatter = $output
->getFormatter();
$lines = array();
foreach (preg_split('/\\r?\\n/', $e
->getMessage()) as $line) {
foreach ($this
->splitStringByWidth($line, $width - 4) as $line) {
// pre-format lines to get the right string length
$lineLength = $this
->stringWidth(preg_replace('/\\[[^m]*m/', '', $formatter
->format($line))) + 4;
$lines[] = array(
$line,
$lineLength,
);
$len = max($lineLength, $len);
}
}
$messages = array(
'',
'',
);
$messages[] = $emptyLine = $formatter
->format(sprintf('<error>%s</error>', str_repeat(' ', $len)));
$messages[] = $formatter
->format(sprintf('<error>%s%s</error>', $title, str_repeat(' ', max(0, $len - $this
->stringWidth($title)))));
foreach ($lines as $line) {
$messages[] = $formatter
->format(sprintf('<error> %s %s</error>', $line[0], str_repeat(' ', $len - $line[1])));
}
$messages[] = $emptyLine;
$messages[] = '';
$messages[] = '';
$output
->writeln($messages, OutputInterface::OUTPUT_RAW);
if (OutputInterface::VERBOSITY_VERBOSE <= $output
->getVerbosity()) {
$output
->writeln('<comment>Exception trace:</comment>');
// exception related properties
$trace = $e
->getTrace();
array_unshift($trace, array(
'function' => '',
'file' => $e
->getFile() !== null ? $e
->getFile() : 'n/a',
'line' => $e
->getLine() !== null ? $e
->getLine() : 'n/a',
'args' => array(),
));
for ($i = 0, $count = count($trace); $i < $count; ++$i) {
$class = isset($trace[$i]['class']) ? $trace[$i]['class'] : '';
$type = isset($trace[$i]['type']) ? $trace[$i]['type'] : '';
$function = $trace[$i]['function'];
$file = isset($trace[$i]['file']) ? $trace[$i]['file'] : 'n/a';
$line = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a';
$output
->writeln(sprintf(' %s%s%s() at <info>%s:%s</info>', $class, $type, $function, $file, $line));
}
$output
->writeln('');
$output
->writeln('');
}
} while ($e = $e
->getPrevious());
if (null !== $this->runningCommand) {
$output
->writeln(sprintf('<info>%s</info>', sprintf($this->runningCommand
->getSynopsis(), $this
->getName())));
$output
->writeln('');
$output
->writeln('');
}
}