<?php
//当在生产环境时，取消下面的注释
//$this->layout()->setTemplate('error/404');
?>
<h1>A 404 error occurred</h1>
<h2><?= $this->message ?></h2>

<?php if (! empty($this->reason)) :
    switch ($this->reason) {
        case Application::ERROR_CONTROLLER_CANNOT_DISPATCH:
            $reasonMessage = 'The requested controller was unable to dispatch the request.';
            break;
        case Application::ERROR_MIDDLEWARE_CANNOT_DISPATCH:
            $reasonMessage = 'The requested middleware was unable to dispatch the request.';
            break;
        case Application::ERROR_CONTROLLER_NOT_FOUND:
            $reasonMessage = 'The requested controller could not be mapped to an existing controller class.';
            break;
        case Application::ERROR_CONTROLLER_INVALID:
            $reasonMessage = 'The requested controller was not dispatchable.';
            break;
        case Application::ERROR_ROUTER_NO_MATCH:
            $reasonMessage = 'The requested URL could not be matched by routing.';
            break;
        default:
            $reasonMessage = 'We cannot determine at this time why a 404 was generated.';
            break;
    }
?>
<p><?= $reasonMessage ?></p>
<?php endif ?>

<?php if (! empty($this->controller)) : ?>
<dl>
    <dt>Controller:</dt>
    <dd>
        <?= $this->escapeHtml($this->controller) ?>
        <?php
        if (! empty($this->controller_class) && $this->controller_class != $this->controller) {
            printf('(resolves to %s)', $this->escapeHtml($this->controller_class));
        }
        ?>
    </dd>
</dl>
<?php endif ?>

<?php if (! empty($this->display_exceptions)) : ?>
    <?php if (isset($this->exception)
        && ($this->exception instanceof \Exception || $this->exception instanceof \Error)) : ?>
<hr/>

<h2>Additional information:</h2>
<h3><?= get_class($this->exception) ?></h3>
<dl>
    <dt>File:</dt>
    <dd>
        <pre><?= $this->exception->getFile() ?>:<?= $this->exception->getLine() ?></pre>
    </dd>
    <dt>Message:</dt>
    <dd>
        <pre><?= $this->escapeHtml($this->exception->getMessage()) ?></pre>
    </dd>
    <dt>Stack trace:</dt>
    <dd>
        <pre><?= $this->escapeHtml($this->exception->getTraceAsString()) ?></pre>
    </dd>
</dl>

        <?php if ($ex = $this->exception->getPrevious()) : ?>
<hr/>

<h2>Previous exceptions:</h2>
<ul class="list-unstyled">
            <?php $icount = 0 ?>
            <?php while ($ex) : ?>
    <li>
        <h3><?= get_class($ex) ?></h3>
        <dl>
            <dt>File:</dt>
            <dd>
                <pre><?= $ex->getFile() ?>:<?= $ex->getLine() ?></pre>
            </dd>
            <dt>Message:</dt>
            <dd>
                <pre><?= $this->escapeHtml($ex->getMessage()) ?></pre>
            </dd>
            <dt>Stack trace:</dt>
            <dd>
                <pre><?= $this->escapeHtml($ex->getTraceAsString()) ?></pre>
            </dd>
        </dl>
    </li>
                <?php
                $ex = $ex->getPrevious();
                if (++$icount >= 50) {
                    echo '<li>There may be more exceptions, but we do not have enough memory to process it.</li>';
                    break;
                }
                ?>
            <?php endwhile ?>
</ul>
        <?php endif ?>
    <?php else : ?>
<h3>No Exception available</h3>
    <?php endif ?>
<?php endif ?>
