Пользовательские страницы ошибок только для среды PROD? - PullRequest
2 голосов
/ 28 февраля 2012

Как настроить пользовательские страницы ошибок только для среды PROD?Я хочу показать пользовательские для производства, но обычные за исключением среды разработки.

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 23 мая 2012

У меня была та же проблема, и решение было довольно простым. Вы должны изменить параметр twig.exception_listener.contoller, чтобы перенаправить отображение страницы ошибки на ваш собственный контроллер, что может расширить оригинальный контроллер исключений Twig.

Пример (YourBundle/Resources/config/services.xml):

<parameter key="twig.exception_listener.controller">YourBundle\Controller\ExceptionController::showAction</parameter>

Затем вам нужно создать свой собственный ExceptionController с методом showAction, проверить среду и сделать то, что вы хотите сделать, или передать запрос на parent::showAction().

namespace YourBundle\Controller;

use Symfony\Bundle\TwigBundle\Controller\ExceptionController as BaseExceptionController;
use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference;
use Symfony\Component\HttpKernel\Exception\FlattenException;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Symfony\Component\HttpFoundation\Response;

class ExceptionController extends BaseExceptionController {

    public function showAction(FlattenException $exception, DebugLoggerInterface $logger = null, $format = 'html') {
        $kernel = $this->container->get('kernel');

        if ($kernel->getEnvironment() == 'prod') {
            $request = $this->container->get('request');
            $request->setRequestFormat($format);

            $templating = $this->container->get('templating');
            $code = $exception->getStatusCode();

            $template = new TemplateReference('YourBundle', 'Exception', 'errorpage', $format, 'twig');
            if ($templating->exists($template)) {
                    $response = $templating->renderResponse($template, array(
                        'status_code' => $code,
                        'message_code' => 'error_' . $code,
                        'status_text' => Response::$statusTexts[$code],
                        'requested_url' => $request->getUri(),
                ));

                $response->setStatusCode($code);
                $response->headers->replace($exception->getHeaders());

                return $response;
            }
        }

        return parent::showAction($exception, $logger, $format);
    }
}

Остерегайтесь ошибок в errorpage.html.twig, поскольку исключения при обработке веток обрабатываются не так, как обычно.

0 голосов
/ 02 февраля 2014

Если вы не хотите переопределять контроллер исключений:

Сначала вы можете скопировать всю папку (или определенный файл макета) на

\vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\Resources\views\ 

до

\app\Resources\TwigBundle\views 

Затем настройте представление в каждом файле макета в соответствии с вашим дизайном.

Затем в файле макета настройте сообщение для каждой среды следующим образом

{% if app.environment == 'prod' %}
// message for prod
{% else %}
// message for dev
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...