Как вернуть правильную ошибку 404 из Extbase с конфигурацией обработки ошибок

Версия TYPO3: 9.5.4

Цель: я хочу вернуть ошибку 404 от контроллера Extbase с правильным кодом состояния и т. д., который использует конфигурацию для обработки ошибок 404, которую я установил в конфигурации сайта.

Убедитесь, что обработка ошибок 404 работает: я настраиваю обработку ошибок 404 в конфигурации сайта. Это должно показать содержимое конкретной страницы. Если я перейду на www.my-domain.local / asdfasdf, я получу код статуса 404 с содержанием указанной мной страницы.

Что я пробовал в Extbase:

# In the action    
return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
        $GLOBALS['TYPO3_REQUEST'],
        'The requested page does not exist',
        ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND]
    );

Результат:

Вариант A (без обработки ошибок в конфигурации сайта): исключение с кодом состояния 404> O.K

Вариант B (обработка ошибок для отображения содержимого страницы): страница отображается со статусом 200, показывает нормальное содержимое указанной страницы (верхний колонтитул, нижний колонтитул и т. Д.)> Не в порядке

Вопрос: Как мне заставить Extbase делать то же самое, что и обычные страницы?


person Florian Rachor    schedule 05.03.2019    source источник


Ответы (1)


Если вы просто вернете этот ответ в своем действии, рендеринг страницы выполняется и не прерывается. Передайте ответ ImmediateResponseException, чтобы обработчик ошибок обработал его.

$response = GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
    $GLOBALS['TYPO3_REQUEST'],
    'Your error message',
    ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND]
);
throw new ImmediateResponseException($response);
person Mikel Wohlschlegel    schedule 05.03.2019
comment
Вы великолепны, что работает именно так, как должно. Большое спасибо! - person Florian Rachor; 07.03.2019