我的插件配置如下所示;
\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
(重定向到另一个页面),页面会抛出错误,抱怨“重定向太多”。
我能够转发到同一控制器中的另一个操作,但如何转发到另一个控制器中的另一个操作?
事实证明,由于上述原因,
switchableControllerActions
已被弃用。它在运行时覆盖插件的原始配置。但庆幸的是我不会依赖这种设置。尽管弃用通知提到了这一点,但它进一步指出,他们正在删除它,因为它不遵守插件的范例。引用弃用通知中的内容,
已被标记为已弃用并将 可能会在switchableControllerActions
的下一个主要版本之一中删除 版本TYPO3
或11.0
。12.0
用于 覆盖允许的集合 通过打字稿或插件 Flexforms 进行控制器和操作。虽然这 方便可以重复使用相同的插件进行多种不同的用途 在这种情况下,它也非常有问题,因为它完全覆盖了 原始配置定义为switchableControllerActions
。\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin
因此有不好的影响 纠正[原文如此]将其删除。switchableControllerActions
首先,
覆盖原来的 在运行时配置插件并可能取决于 与想法相矛盾的条件switchableControllerActions
是 定义配置的权威方式。\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin
使用相同的插件作为许多不同的入口点 功能与插件服务于特定特定的想法相矛盾 目的。可切换的控制器操作允许创建一个中央 负责一切的插件。
来源:弃用:#89463 - 弃用 switchableControllerActions
我完全同意这是一个很好的举措。
有一种解决方法可以通过 TYPO3 在单个扩展的扩展配置文件 (ext_localconf.php) 中定义多个插件的能力实现。这样,我们就可以为 TypoScript 或 FlexForm 中所需的任何单独操作定义一个专用插件。
可切换控制器操作在 TYPO3 中对于定义灵活的插件行为至关重要。在 TYPO3 Extbase 中升级或重组扩展时,需要迁移这些操作,以使 Flexform 设置与新列表类型或更新的控制器操作保持一致。
如何迁移可切换控制器操作 创建自定义升级向导:
使用 TYPO3 的升级向导来识别和更新具有过时的 switchableControllerActions 的 tt_content 记录。这会自动执行迁移过程。 注册向导: 使用以下方法将自定义向导添加到 ext_localconf.php:
php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['myExtension_exampleUpgradeWizard']
= \Vendor\Extension\Upgrades\SwitchableUpgradeWizard::class;
运行向导: 访问 TYPO3 安装工具或维护区域,找到您的向导,然后执行它以无缝更新所有记录。
为什么要自动化迁移?
此方法简化了可切换控制器操作的迁移,提高了准确性,并使您的 TYPO3 Extbase 项目与最新更改保持一致。有关更多详细信息,请参阅我们的完整博客。