Typo3 如何将switchableControllerActions转发到Type3中的另一个控制器操作

Typo3 如何将switchableControllerActions转发到Type3中的另一个控制器操作,typo3,extbase,Typo3,Extbase,我的插件配置如下所示 \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin('Orbit.Navigator', 'mission', [ \Orbit\Navigator\Controller\SpaceXController::class => 'cpt, cpr, shuttle', \Orbit\Navigator\Controller\Conf\FlightController::

我的插件配置如下所示

\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
        }
    }
}
请求到达
SpaceXController
中的
shuttleAction()
方法。处理后,如何将其转发到
FlightController
中的
timerAction()

使用

$this->forward('timer', 'Flight', $this->request->getControllerExtensionName(), $this->request->getArguments());
$this->redirect('timer', 'Flight', $this->request->getControllerExtensionName(), $this->request->getArguments());
行为类似于
$\u POST
,结果是:

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

$this->forward('timer', 'Flight', $this->request->getControllerExtensionName(), $this->request->getArguments());
$this->redirect('timer', 'Flight', $this->request->getControllerExtensionName(), $this->request->getArguments());
行为类似于
$\u GET
(重定向到另一个页面),页面抛出一个错误,抱怨“重定向太多”


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

因此,由于上述原因,
switchableControllerActions
被弃用。它在运行时覆盖插件的原始配置。但我要感谢的是,我不会依赖于这种设置。尽管弃用通知中提到了这一点,但它进一步指出,他们正在删除它,因为他们没有遵守插件的范例。引用弃用通知中的话

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

switchableControllerActions
用于覆盖允许的一组 通过打字脚本或插件flexforms执行控制器和操作。而这 是否方便重复使用同一插件进行多种不同用途 在某些情况下,它也非常有问题,因为它完全覆盖了 通过定义的原始配置
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin

switchableControllerActions
因此具有不良影响 纠正[原文如此]它们的移除

首先,
switchableControllerActions
覆盖原始 插件在运行时的配置,可能取决于 与……的观念相矛盾的条件
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin
作为 定义配置的权威方法

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

资料来源:

我个人完全同意这是一个好的举动


有一种方法可以解决这个问题,那就是TYPO3能够在单个扩展的扩展配置文件(ext_localconf.php)中定义多个插件。有了它,就可以为TypoScript或FlexForm中需要的任何单个操作定义一个专用插件。

您的插件配置是什么样的?飞行->定时器是允许的控制器动作对吗?是的,它是允许的。我正在修改问题,以包括配置。谢谢你的问题。你的配置将你的“FlightController”放在“Conf”子目录中。你可能需要转发/重定向到控制器名“Conf\Flight”以使其工作。不过我不确定在typo3 10(你似乎正在使用的)中是否仍然如此.@Nitori刚刚尝试过,也使用了正斜杠,并尝试将
FlightController
移动到与
SpaceXController
相同的控制器,但没有成功。任何不可切换的controllerActions都会毫无问题地转发到“Flight”。还注意到,如果
FlightController
位于中的单独插件中,
redirect()
似乎可以工作,但不能
转发()
。不幸的是,对于
重定向()
,参数被抛出到地址栏并更改页面,这是不可取的。希望在不更改页面的情况下转发,即使用
转发()
或具有类似行为的方法或技术。因此,在至少键入3 9之前,解决方案是在switchableControllerActions中定义所有控制器操作对。