Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3 如何使用错误处理配置从Extbase返回正确的404错误_Typo3_Extbase_Typo3 9.x - Fatal编程技术网

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

Typo3 如何使用错误处理配置从Extbase返回正确的404错误,typo3,extbase,typo3-9.x,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::makeIn

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]
    );
结果:

# 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>OK的异常

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


问题:如何让Extbase做与普通页面相同的事情

如果您只是在操作中返回此响应,则页面呈现正在进行中,不会被中断。将响应传递给一个立即响应异常,让ErrorHandler处理它

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

你太棒了,这正是它应该做的。非常感谢你!