Symfony 4: AccessDeniedHttpException () получить доступ к пользовательским переменным

В моем RequestListener.php, если объект недоступен для пользователя, я использую следующее исключение:

throw new AccessDeniedHttpException();

Таким образом, он возвращает мне мой собственный шаблон html с ошибкой 403 с использованием twig.

<div class = "jumbotron jumbotron-fluid exception">
    <table class = "wrapper">
        <tr>
            <td>
                <div class = "error-code">
                    <span>403</span>
                    <div class = "caption">
                        <h1 class = "text-light">Test h1</h1>
                        <h2 class = "text-light">Test h2</h2>
                        <p>
                            Test
                        </p>
                    </div>
                </div>
            </td>
        </tr>
    </table>
</div>

Теперь я хочу сделать то же самое:

throw new AccessDeniedHttpException();

Использование другого сообщения в зависимости от ситуации, в которой возникает ошибка 403.

Например, я пытался сделать следующее:

throw new AccessDeniedHttpException('custom');

В моем шаблоне 403.html.twig

<div class = "jumbotron jumbotron-fluid exception">
<table class = "wrapper">
    <tr>
        <td>
            {% if status_text %}
               {{ status_text }}
            {% else %}
            <div class = "error-code">
                <span>403</span>
                <div class = "caption">
                    <h1 class = "text-light">Test h1</h1>
                    <h2 class = "text-light">Test h2</h2>
                    <p>
                        Test
                    </p>
                </div>
            </div>
            {% endif %}
        </td>
    </tr>
</table>

Но я не знаю, доступна ли строка, переданная в исключении, в моем шаблоне ошибки ...

Вы всегда можете попробовать посмотреть, что находится в status_text, используя {{ dump(status_text) }}.

Marc-André 05.12.2018 16:56

С APP_ENV = dev он показывает мне "custom" с правильным исключением 403 (но не мой шаблон html, это страница отладки по умолчанию). С APP_ENV = prod дамп не работает, и отображение переменной напрямую ничего не показывает ...

Thibault Dumas 05.12.2018 16:59

Может быть, взгляните на это: stackoverflow.com/a/19814235/5165724. Вы можете добиться желаемого, используя переменную exception.message в twig.

Marc-André 05.12.2018 17:11

Спасибо за ответ :) Именно то, что я хотел!

Thibault Dumas 06.12.2018 09:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
4
753
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Может быть, взгляните на это: Как отобразить текст исключения на настраиваемой странице ошибки в Symfony?.

Вы можете использовать переменную exception.message в twig.

<div class = "jumbotron jumbotron-fluid exception">
<table class = "wrapper">
    <tr>
        <td>
            {% if exception.message %}
               {{ exception.message }}
            {% else %}
            <div class = "error-code">
                <span>403</span>
                <div class = "caption">
                    <h1 class = "text-light">Test h1</h1>
                    <h2 class = "text-light">Test h2</h2>
                    <p>
                        Test
                    </p>
                </div>
            </div>
            {% endif %}
        </td>
    </tr>
</table>

Другие вопросы по теме