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中定义所有控制器操作对。