TYPO3 10中已弃用ErrorpageMessage类的替代落地方案咨询
TYPO3 10适配tt_board弃用ErrorpageMessage的解决方案
核心结论
不存在额外需要调用的TYPO3对象,ErrorPageController::errorAction返回的HTML内容可以直接输出,也可以封装为PSR-7响应对象返回,适配不同场景需求。
方案1:最简适配原有输出逻辑
直接输出ErrorPageController返回的HTML内容即可,完全兼容原有output()方法的效果:
use TYPO3\CMS\Core\Controller\ErrorPageController; use TYPO3\CMS\Core\Utility\GeneralUtility; ... $message = $languageObj->getLabel('error_no_permission'); $title = $languageObj->getLabel('error_access_denied'); $content = GeneralUtility::makeInstance(ErrorPageController::class)->errorAction( $title, $message ); // 替换原有$messagePage->output()逻辑 echo $content; exit;
方案2:符合TYPO3 PSR-7规范的输出方案
如果是在控制器上下文触发错误,更推荐返回标准响应对象,适配TYPO3 10的中间件架构:
use TYPO3\CMS\Core\Controller\ErrorPageController; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Http\HtmlResponse; ... $message = $languageObj->getLabel('error_no_permission'); $title = $languageObj->getLabel('error_access_denied'); $content = GeneralUtility::makeInstance(ErrorPageController::class)->errorAction( $title, $message ); // 返回响应对象后由TYPO3内核处理输出,403为权限拒绝对应状态码,可按需调整 return new HtmlResponse($content, 403);
异常场景弹窗输出方案
如果是需要在异常触发的对话框中展示内容,可直接使用TYPO3核心的FlashMessage服务实现:
use TYPO3\CMS\Core\Messaging\FlashMessage; use TYPO3\CMS\Core\Messaging\FlashMessageService; use TYPO3\CMS\Core\Utility\GeneralUtility; ... $message = $languageObj->getLabel('error_no_permission'); $title = $languageObj->getLabel('error_access_denied'); $flashMessage = GeneralUtility::makeInstance( FlashMessage::class, $message, $title, FlashMessage::ERROR, true ); $flashMessageService = GeneralUtility::makeInstance(FlashMessageService::class); $messageQueue = $flashMessageService->getMessageQueueByIdentifier(); $messageQueue->addMessage($flashMessage);
内容的提问来源于stack exchange,提问作者Franz Holzinger
相关产品推荐
相关产品推荐

