如何从TypoScript调用extbase动作

3
这个问题已经在博客和互联网的其他平台上多次提出和回答。然而,这些解决方案似乎对TYPO3 10版本(我认为也适用于版本7、8和9)无效。
我有一个名为 SpaceController 的类,其中包含动作 shuttleAction ,这些都在 ext_localconf.php 文件中进行了注册且未被缓存。
以下是我尝试过的内容:
10 = USER_INT
10 {
    userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
    extensionName = Navigator
    pluginName = mission
    vendorName = Orbit

    switchableControllerActions {
        Space{
            1 = shuttle
        }
    }
}

我收到了错误提示信息;
(1/2) #1278450972 TYPO3\CMS\Extbase\Reflection\Exception\UnknownClassException
Class does not exist. Reflection failed.

这些类(class)、插件(plugin)、扩展(extension)和供应商(vendor)确实存在,我正在使用它们执行其他操作,这些操作有效。但是,无法通过typoscript从该类中选择一个动作。

我已经尝试了其他控制器(Controller)和动作(actions),但似乎都无法使用此方法。

我正在尝试通过TypoScript执行一个动作。如何从TypoScript调用控制器(Controller)的动作?我正在使用TYPO3版本10。我相信版本8或9的方法也适用于版本10。我已经尝试了这些版本,但没有成功。

以下方法有效,但会选择第一个(默认)动作。

10 = USER
10 {

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

如果我添加了controlleraction,那么默认的action会被忽略,而使用新添加的action
10 = USER
10 {

    userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
    vendorName = Orbit
    extensionName = Navigator
    pluginName = mission
    controller = Space
    action = shuttle
}

我想选择要执行的具体操作。

1
如果您遇到“类不存在”的错误,请同时指定它所尝试查找的类名。这样更容易找到错误——由于您正在使用TYPO3 10,控制器注册方式已经发生了变化,可能需要使用switchableControllerActions设置的更改语法。即使用控制器的完整类名。不过我没有尝试过。请注意,TYPO3 10 LTS尚未发布,仍在开发中。 - Nitori
@Nitori 再次感谢您的帮助。类与其他问题中的类相同。这些问题似乎是相关的,因为它们以相同的方式解决,并遵循我最近提出的问题中所述的相同弃用通知。我认为这两个问题都得到了充分的满足。 - John Miller
将你的第一个实现中的USER_INT更改为USER。 - Euli
1个回答

6
经过数小时的搜索和实验,显然目前不可能通过 TypoScript 选择一个操作,但是有一个变通方法。
对于任何寻求解决此问题的人,
1. 在您的 ext_localconf.php 中为您想要的控制器和操作创建一个新的插件条目。
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    'yourExtension',
    'yourPlugin1',
    [
        'FooController' => 'list'
    ]
);

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    'yourExtension',
    'yourPlugin2',
    [
        'FooController' => 'show'
    ]
);
  1. 确保你想要执行的操作是列表中的第一个(默认)操作。 如果在一个插件中放置了多个操作,并且您尝试从TypoScript执行除第一个以外的任何操作,则无法正常工作。
  2. 在TypoScript中引用该插件。

希望能对某些人有所帮助。

欢迎任何拥有更好解决方案或改进此解决方案的人提出。


2
你可以在forge.typo3.org上添加一张工单,因为我怀疑删除选择操作的可能性不是有意而为。 - Jonas Eberle
2
可切换的控制器操作已正式弃用。 https://docs.typo3.org/c/typo3/cms-core/main/zh-cn/Changelog/10.3/Deprecation-89463-SwitchableControllerActions.html - ekimas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接