如何在 TYPO3 中将 switchableControllerActions 转发到另一个控制器操作

问题描述 投票:0回答:2

我的插件配置如下所示;

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin('Orbit.Navigator', 'mission', [
        \Orbit\Navigator\Controller\SpaceXController::class => 'cpt, cpr, shuttle',
        \Orbit\Navigator\Controller\Conf\FlightController::class => 'pressure,target,timer',
        \Orbit\Navigator\Controller\Conf\WeatherController::class => 'mav,hub',
]);

我有这个设置,

10 = USER_INT
10 {
    userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
    extensionName = Navigator
    pluginName = mission
    vendorName = Orbit

    switchableControllerActions {
        SpaceX{
            1 = shuttle
        }
    }
}

请求到达

shuttleAction()
中的
SpaceXController
方法。处理后,如何将其转发到
timerAction()
中的
FlightController

使用;

$this->forward('timer', 'Flight', $this->request->getControllerExtensionName(), $this->request->getArguments());

的作用类似于

$_POST
并导致;

(1/2) #1278450972 TYPO3\CMS\Extbase\Reflection\Exception\UnknownClassException
Class does not exist. Reflection failed.

使用;

$this->redirect('timer', 'Flight', $this->request->getControllerExtensionName(), $this->request->getArguments());

的作用类似于

$_GET
(重定向到另一个页面),页面会抛出错误,抱怨“重定向太多”。

我能够转发到同一控制器中的另一个操作,但如何转发到另一个控制器中的另一个操作?

typo3 extbase
2个回答
0
投票

事实证明,由于上述原因,

switchableControllerActions
已被弃用。它在运行时覆盖插件的原始配置。但庆幸的是我不会依赖这种设置。尽管弃用通知提到了这一点,但它进一步指出,他们正在删除它,因为它不遵守插件的范例。引用弃用通知中的内容,

switchableControllerActions
已被标记为已弃用并将 可能会在
TYPO3
的下一个主要版本之一中删除 版本
11.0
12.0

switchableControllerActions
用于 覆盖允许的集合 通过打字稿或插件 Flexforms 进行控制器和操作。虽然这 方便可以重复使用相同的插件进行多种不同的用途 在这种情况下,它也非常有问题,因为它完全覆盖了 原始配置定义为
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin

switchableControllerActions
因此有不好的影响 纠正[原文如此]将其删除。

首先,

switchableControllerActions
覆盖原来的 在运行时配置插件并可能取决于 与想法相矛盾的条件
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin
是 定义配置的权威方式。

使用相同的插件作为许多不同的入口点 功能与插件服务于特定特定的想法相矛盾 目的。可切换的控制器操作允许创建一个中央 负责一切的插件。

来源:弃用:#89463 - 弃用 switchableControllerActions

我完全同意这是一个很好的举措。

有一种解决方法可以通过 TYPO3 在单个扩展的扩展配置文件 (ext_localconf.php) 中定义多个插件的能力实现。这样,我们就可以为 TypoScript 或 FlexForm 中所需的任何单独操作定义一个专用插件。


0
投票

可切换控制器操作在 TYPO3 中对于定义灵活的插件行为至关重要。在 TYPO3 Extbase 中升级或重组扩展时,需要迁移这些操作,以使 Flexform 设置与新列表类型或更新的控制器操作保持一致。

如何迁移可切换控制器操作 创建自定义升级向导:

使用 TYPO3 的升级向导来识别和更新具有过时的 switchableControllerActionstt_content 记录。这会自动执行迁移过程。 注册向导: 使用以下方法将自定义向导添加到 ext_localconf.php

php

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['myExtension_exampleUpgradeWizard']  
    = \Vendor\Extension\Upgrades\SwitchableUpgradeWizard::class;

运行向导: 访问 TYPO3 安装工具或维护区域,找到您的向导,然后执行它以无缝更新所有记录。

为什么要自动化迁移?

  • 节省时间:无需手动编辑。
  • 减少错误:确保整个数据库的更新一致。
  • 面向未来:面向未来TYPO3迁移的可重复解决方案

此方法简化了可切换控制器操作的迁移,提高了准确性,并使您的 TYPO3 Extbase 项目与最新更改保持一致。有关更多详细信息,请参阅我们的完整博客。

© www.soinside.com 2019 - 2024. All rights reserved.