如何使用错误处理配置从 Extbase 返回正确的 404 错误

Flo*_*hor 4 typo3 extbase typo3-9.x

TYPO3版本:9.5.4

目标:我想从 Extbase 控制器返回 404 错误,并使用正确的状态代码等,该控制器使用我在站点配置中设置的 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]
    );
Run Code Online (Sandbox Code Playgroud)

结果:

变体 A(站点配置中无错误处理):异常,状态代码 404 > 正常

变体 B(显示页面内容的错误处理):页面呈现状态为 200,显示所述页面的正常内容(页眉、页脚等)> 不正常

问题:如何让 Extbase 执行与普通页面相同的操作?

Mik*_*gel 8

如果您只是在操作中返回此响应,则页面渲染正在进行中并且不会被中断。将响应传递给ImmediateResponseException以让 ErrorHandler 处理它。

$response = GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
    $GLOBALS['TYPO3_REQUEST'],
    'Your error message',
    ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND]
);
throw new ImmediateResponseException($response);
Run Code Online (Sandbox Code Playgroud)