【问题标题】:Replacement for deprecated TYPO3 ErrorpageMessage替换已弃用的 TYPO3 ErrorpageMes​​sage
【发布时间】:2021-10-30 18:05:06
【问题描述】:

在将扩展 tt_board 升级到 TYPO3 10 后,我偶然发现了弃用 #77164 - ErrorpageMes​​sage 和 AbstractStandaloneMessage。 官方页面只声明应该使用新的基于 Fluid 的 ErrorPageController 类。 然而,这个控制器类只能为我生成一个 HTML 结果字符串。但工作的后半部分不见了。 TYPO3 必须以某种方式在异常引发的错误对话框中显示 HTML 输出。 有什么简单的解决办法吗?

之前:

use TYPO3\CMS\Core\Messaging\ErrorpageMessage;

...
$message = $languageObj->getLabel('error_no_permission');
$title = $languageObj->getLabel('error_access_denied');
$messagePage =
    GeneralUtility::makeInstance(
        ErrorpageMessage::class,
        $message,
        $title
    );
$messagePage->output();

现在:

use TYPO3\CMS\Core\Controller\ErrorPageController;

...
$message = $languageObj->getLabel('error_no_permission');
$title = $languageObj->getLabel('error_access_denied');
$errorController =
    GeneralUtility::makeInstance(
        ErrorPageController::class
    );
$content = GeneralUtility::makeInstance(ErrorPageController::class)->errorAction(
    $title,
    $message
);

我可以将此 $content 发送到 TYPO3 对象,该对象将为扩展程序执行错误输出吗?

【问题讨论】:

    标签: error-handling typo3


    【解决方案1】:

    一般来说,您可以用任何可能的方式来展示它,但您可以使用flashMessages 以标准化的方式展示它。 请注意,对于前端,您必须根据样式实现 CSS。 在流体中,它看起来像这样,并且是使用 extension_builder 创建的扩展的一部分:

    <f:flashMessages />
    

    您可能需要稍微不同地实现它才能循环几条消息。我从不经常使用它,但我记得实现改变了一次,并且怀疑它是否反映在这种实现中。

    您可以在下面找到所需的详细信息:

    1. 这里描述了 flashMessages 的实现: https://docs.typo3.org/m/typo3/reference-coreapi/11.5/en-us/ApiOverview/FlashMessages/Index.html

    2. 您在此处找到的 flashMessage-ViewHelper 的描述: https://docs.typo3.org/other/typo3/view-helper-reference/11.5/en-us/typo3/fluid/latest/FlashMessages.html

    3. 您可能可以从引导程序中获取 CSS,但可以从扩展 examples 中获取可靠的 CSS。在后端的 CSS 中你也可以搜索它。

    关于您的代码:
    我认为您可以忽略它,因为它没有被使用:

    $errorController =
        GeneralUtility::makeInstance(
            ErrorPageController::class
        );
    

    或者你可以使用这个代码:

    $errorController =
        GeneralUtility::makeInstance(
            ErrorPageController::class
        );
    $content = $errorController->errorAction(
        $title,
        $message
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2014-02-19
      • 2019-12-20
      相关资源
      最近更新 更多