toArray() public method

public toArray ( )
コード例 #1
0
 /**
  * Converts an Exception to a Response.
  *
  * A "showException" request parameter can be used to force display of an error page (when set to false) or
  * the exception page (when true). If it is not present, the "debug" value passed into the constructor will
  * be used.
  *
  * @param Request              $request   The request
  * @param FlattenException     $exception A FlattenException instance
  * @param DebugLoggerInterface $logger    A DebugLoggerInterface instance
  *
  * @return Response
  *
  * @throws \InvalidArgumentException When the exception template does not exist
  */
 public function showAction(Request $request, FlattenException $exception, DebugLoggerInterface $logger = null)
 {
     $showException = $request->attributes->get('showException', $this->debug);
     // As opposed to an additional parameter, this maintains BC
     $code = $exception->getStatusCode();
     $response = ['error' => $code, 'message' => isset(Response::$statusTexts[$code]) ? Response::$statusTexts[$code] : ''];
     if ($showException) {
         $response['exception'] = $exception->toArray();
     }
     return new JsonResponse($response, $code);
 }
コード例 #2
0
    /**
     * Gets the HTML content associated with the given exception.
     *
     * @param FlattenException $exception A FlattenException instance
     *
     * @return string The content as a string
     */
    public function getContent(FlattenException $exception)
    {
        switch ($exception->getStatusCode()) {
            case 404:
                $title = 'Sorry, the page you are looking for could not be found.';
                break;
            default:
                $title = 'Whoops, looks like something went wrong.';
        }
        $content = '';
        if ($this->debug) {
            try {
                $count = count($exception->getAllPrevious());
                $total = $count + 1;
                foreach ($exception->toArray() as $position => $e) {
                    $ind = $count - $position + 1;
                    $class = $this->formatClass($e['class']);
                    $message = nl2br($this->escapeHtml($e['message']));
                    $content .= sprintf(<<<EOF
                        <h2 class="block_exception clear_fix">
                            <span class="exception_counter">%d/%d</span>
                            <span class="exception_title">%s%s:</span>
                            <span class="exception_message">%s</span>
                        </h2>
                        <div class="block">
                            <ol class="traces list_exception">

EOF
, $ind, $total, $class, $this->formatPath($e['trace'][0]['file'], $e['trace'][0]['line']), $message);
                    foreach ($e['trace'] as $trace) {
                        $content .= '       <li>';
                        if ($trace['function']) {
                            $content .= sprintf('at %s%s%s(%s)', $this->formatClass($trace['class']), $trace['type'], $trace['function'], $this->formatArgs($trace['args']));
                        }
                        if (isset($trace['file']) && isset($trace['line'])) {
                            $content .= $this->formatPath($trace['file'], $trace['line']);
                        }
                        $content .= "</li>\n";
                    }
                    $content .= "    </ol>\n</div>\n";
                }
            } catch (\Exception $e) {
                // something nasty happened and we cannot throw an exception anymore
                if ($this->debug) {
                    $title = sprintf('Exception thrown when handling an exception (%s: %s)', get_class($e), $this->escapeHtml($e->getMessage()));
                } else {
                    $title = 'Whoops, looks like something went wrong.';
                }
            }
        }
        return <<<EOF
            <div id="sf-resetcontent" class="sf-reset">
                <h1>{$title}</h1>
                {$content}
            </div>
EOF;
    }
コード例 #3
0
    /**
     * Gets the HTML content associated with the given exception.
     *
     * @param FlattenException $exception A FlattenException instance
     *
     * @return string The content as a string
     */
    public function getContent(FlattenException $exception)
    {
        switch ($exception->getStatusCode()) {
            case 404:
                $title = 'Sorry, the page you are looking for could not be found.';
                break;
            default:
                $title = 'Whoops, looks like something went wrong.';
        }
        $content = '';
        if ($this->debug) {
            try {
                $count = count($exception->getAllPrevious());
                $total = $count + 1;
                foreach ($exception->toArray() as $position => $e) {
                    $ind = $count - $position + 1;
                    $class = $this->abbrClass($e['class']);
                    $message = nl2br($e['message']);
                    $content .= sprintf(<<<EOF
                        <div class="block_exception clear_fix">
                            <h2><span>%d/%d</span> %s: %s</h2>
                        </div>
                        <div class="block">
                            <ol class="traces list_exception">

EOF
, $ind, $total, $class, $message);
                    foreach ($e['trace'] as $trace) {
                        $content .= '       <li>';
                        if ($trace['function']) {
                            $content .= sprintf('at %s%s%s(%s)', $this->abbrClass($trace['class']), $trace['type'], $trace['function'], $this->formatArgs($trace['args']));
                        }
                        if (isset($trace['file']) && isset($trace['line'])) {
                            if ($linkFormat = ini_get('xdebug.file_link_format')) {
                                $link = str_replace(array('%f', '%l'), array($trace['file'], $trace['line']), $linkFormat);
                                $content .= sprintf(' in <a href="%s" title="Go to source">%s line %s</a>', $link, $trace['file'], $trace['line']);
                            } else {
                                $content .= sprintf(' in %s line %s', $trace['file'], $trace['line']);
                            }
                        }
                        $content .= "</li>\n";
                    }
                    $content .= "    </ol>\n</div>\n";
                }
            } catch (\Exception $e) {
                // something nasty happened and we cannot throw an exception anymore
                if ($this->debug) {
                    $title = sprintf('Exception thrown when handling an exception (%s: %s)', get_class($exception), $exception->getMessage());
                } else {
                    $title = 'Whoops, looks like something went wrong.';
                }
            }
        }
        return <<<EOF
            <div id="sf-resetcontent" class="sf-reset">
                <h1>{$title}</h1>
                {$content}
            </div>
EOF;
    }
コード例 #4
0
ファイル: ExceptionHandler.php プロジェクト: keboola/syrup
 private function getTrace(FlattenException $exception)
 {
     $all = $exception->toArray();
     $str = '';
     foreach ($all as $e) {
         $traces = $e['trace'];
         foreach ($traces as $trace) {
             $str .= "in file " . $trace['file'] . " on line " . $trace['line'] . PHP_EOL;
         }
     }
     return $str;
 }
コード例 #5
0
    public function getContent(FlattenException $exception)
    {
        $content = '';
        $title = 'Exception Report';
        try {
            foreach ($exception->toArray() as $position => $e) {
                $class = $this->formatClass($e['class']);
                $message = nl2br($this->escapeHtml($e['message']));
                $content .= sprintf(<<<EOF
                    <h2>%s</h2>
                    <h3>Type: %s</h3>
                    <div style="margin-bottom: 50px;">
                        <ol>

EOF
, $message, $class, $this->formatPath($e['trace'][0]['file'], $e['trace'][0]['line']));
                foreach ($e['trace'] as $trace) {
                    $content .= '       <li style="border-bottom: 1px solid ' . $this->colors['trace_item_delimiter'] . '; padding: 5px 0 9px 0; margin: 0;">';
                    if (isset($trace['file']) && isset($trace['line'])) {
                        $content .= '<p>' . $this->formatPath($trace['file'], $trace['line']) . '</p>';
                    }
                    if ($trace['function']) {
                        $content .= sprintf('<p>at %s<span style="color: ' . $this->colors['error_position'] . '">%s%s</span>( %s )</p>', $this->formatClass($trace['class']), $trace['type'], $trace['function'], $this->formatArgs($trace['args']));
                    }
                    unset($trace['file'], $trace['line'], $trace['short_class'], $trace['namespace']);
                    if (empty($trace['class'])) {
                        unset($trace['class']);
                        if (empty($trace['type'])) {
                            unset($trace['type']);
                        }
                    }
                    //$content .= '<pre>' . json_encode($trace, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . '</pre>';
                    $content .= "</li>\n";
                }
                $content .= "    </ol>\n</div>";
            }
        } catch (\Exception $e) {
            // something nasty happened and we cannot throw an exception anymore
            $title = sprintf('Exception thrown when handling an exception (%s: %s)', get_class($e), $this->escapeHtml($e->getMessage()));
        }
        return <<<EOF
            <h1>{$title}</h1>
            {$content}
EOF;
    }
コード例 #6
0
    /**
     * Gets the HTML content associated with the given exception.
     *
     * @param FlattenException $exception A FlattenException instance
     * @param bool             $showAll   Show all exceptions or just the last one
     *
     * @return string The content as a string
     */
    public function getContent(FlattenException $exception, $showAll = true)
    {
        switch ($exception->getStatusCode()) {
            case 404:
                $title = "The page you are looking for could not be found";
                break;
            default:
                $title = "Oh noes, something's broken";
        }
        $content = '';
        if ($this->debug) {
            try {
                $exceptions = $exception->toArray();
                if (false === $showAll) {
                    $exceptions = array_slice($exceptions, -1, 1);
                    $count = 1;
                    $total = 1;
                } else {
                    $count = count($exception->getAllPrevious());
                    $total = $count + 1;
                }
                foreach ($exceptions as $position => $e) {
                    $i = 0;
                    $class = $this->abbrClass($e['class']);
                    $message = nl2br($e['message']);
                    if (false === $showAll) {
                        $content .= sprintf(<<<EOT
                        <div>
                            <h3 class="alert alert-error">%s: %s</h3>
                        </div>
EOT
, $class, $message);
                    } else {
                        $ind = $count - $position + 1;
                        $content .= sprintf(<<<EOT
                        <div>
                            <h3 class="alert alert-error">%d/%d %s: %s</h3>
                        </div>
EOT
, $ind, $total, $class, $message);
                    }
                    $content .= <<<EOT
                        <div>
                            <table class="table table-bordered table-striped"><tbody>
EOT;
                    foreach ($e['trace'] as $trace) {
                        $i++;
                        $content .= '       <tr><td>' . $i . '</td><td>';
                        if ($trace['function']) {
                            $content .= sprintf('at %s%s%s(%s)', $this->abbrClass($trace['class']), $trace['type'], $trace['function'], $this->formatArgs($trace['args']));
                        }
                        if (isset($trace['file']) && isset($trace['line'])) {
                            if ($linkFormat = ini_get('xdebug.file_link_format')) {
                                $link = str_replace(array('%f', '%l'), array($trace['file'], $trace['line']), $linkFormat);
                                $content .= sprintf(' in <a href="%s" title="Go to source">%s line %s</a>', $link, $trace['file'], $trace['line']);
                            } else {
                                $content .= sprintf(' in %s line %s', $trace['file'], $trace['line']);
                            }
                        }
                        $content .= "</td</tr>\n";
                    }
                    $content .= "    </tbody></table>\n</div>\n";
                }
            } catch (\Exception $e) {
                // something nasty happened and we cannot throw an exception anymore
                if ($this->debug) {
                    $title = sprintf('Exception thrown when handling an exception (%s: %s)', get_class($exception), $exception->getMessage());
                } else {
                    $title = "Uh oh something's broken";
                }
            }
        }
        list($quote, $author) = $this->getQuote();
        $statusCode = $exception->getStatusCode();
        $ppiLogo = $this->getPpiLogo();
        return <<<EOF
            <div class="page-header well">
                <h1 title="An exception has occurred - Code {$statusCode}"><img src="{$ppiLogo}" height="56" width="89">&nbsp;{$title}.</h1>
                <p class="muted quote"><i>"{$quote}"</i> &mdash; {$author}</p>
            </div>
            <div class="ppi-container well">
                {$content}
            </div>
EOF;
    }