Хобрук: Ваш путь к мастерству в программировании

Как создать шаблон ошибки 403 Forbidden и отобразить его

Я хотел бы создать шаблон ошибки 403 Forbidden и отобразить его с контроллера.

В моем module.config.php у меня есть следующая запись.

    'view_manager' => array(
    'display_not_found_reason' => true,
    'display_exceptions'       => true,
    'doctype'                  => 'HTML5',
    'not_found_template'       => 'error/404',
    'forbidden_template'       => 'error/403',
    'exception_template'       => 'error/index',
    'template_map' => array(
        'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
        'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
        'error/404'               => __DIR__ . '/../view/error/404.phtml',
        'error/403'               => __DIR__ . '/../view/error/403.phtml',
        'error/index'             => __DIR__ . '/../view/error/index.phtml',
    ),
    'template_path_stack' => array(
        __DIR__ . '/../view',
    ),
),

Как видите, я добавил шаблон 403 и файл 403.phtml в папку просмотра/ошибки.

В моем контроллере я пробовал.

$response = $this->getResponse();
$response->setStatusCode(403);

Но ничего не происходит, отображается страница по умолчанию. Когда я изменяю 403 на 404 в приведенном выше коде, отображается страница ошибки 404.

Пожалуйста, может кто-нибудь сказать мне, что мне не хватает, большое спасибо.

08.02.2015


Ответы:


1

Попробуйте использовать onBootstrap для таких вещей (если это подходит для вашего приложения). Представьте, что вы прикрепляете событие для прослушивания на EVENT_ROUTE:

public function onBootstrap(MvcEvent $event) {
    $eventManager = $event->getApplication()->getEventManager();
    $eventManager->attach(MvcEvent::EVENT_ROUTE, array($this, 'protectPage'), -100);
}

Теперь в функции protectPage мы можем в любой момент решить установить ответ на запрещенный (403):

public function protectPage(MvcEvent $event) {
   $match = $event->getRouteMatch();
   ...
   $response = $event->getResponse()->setStatusCode(403);
   //If the 403 template doesnt show, you may try to redirect to an action which has the template. check the following lines.
   $match->setParam('controller', 'User\Controller\Account');
   $match->setParam('action', 'denied');
   ...
}
10.02.2015
Новые материалы

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..