TYPO3:指定插件名称

问题描述

我想链接一个页面,在那里我有一个插件,我想通过 GET 发送一个变量并在该页面显示插件的一些记录。

这个想法是有一个扩展,我可以有一个插件来列出记录和另一个插件显示记录的详细视图。 (另一个为此创建一个新记录)

我收到了这个错误,但我不知道这是什么意思,我应该在哪里指定插件?作为哪个参数?因为 <f:link.page> 没有 pluginName 参数。

有不止一个插件可以处理这个请求(扩展: “MyExtension”,控制器:“MyController”,动作:“new”)。请 指定“pluginName”参数。

<f:link.page pageUid="{settings.pageUid}" additionalParams="{theIdINeed: theIdINeed}">
link
</f:link.page>
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
  'Myvendor.MyExtension','ViewPlugin',[
      \Myvendor\MyExtension\Controller\TheController::class => 'show',],[
      \Myvendor\MyExtension\Controller\TheController::class => '',]
);

这是我的方法,好像是在这方法之后出现错误

public function showAction()
{
    $model = $this->someRepository->findByUid( $_GET['theIdIneed']);
    $this->view->assign('model',$model);
}

解决方法

您通常使用特定参数,例如 theIdIneedpluginname[action]pluginname[controller],而不是一般参数 (pluginname[tablename])。
如果大多数情况下您有一个带有 pluginname[tablename] 的 ID,很明显您希望使用匹配的控制器 show 这条记录并且可以省略这些参数。

通过这种方式识别插件。

为了更好的可读性,您可以将此参数映射到伪路径段(slugs)中。


另一个想法(您可能需要更具体):
如果您在页面上多次插入相同的插件,并且您希望这些不同的内容元素表现不同,则需要额外的信息。要么存储在全局变量中(例如 ext:news 存储已显示新闻的列表,因此同一新闻不会在同一页面上多次调侃),或者您提供一个附加参数(tt_content 记录的 uid)来标识特定插件应该回应。但您需要自行评估。

,

请使用 视图助手。您可以指定操作、控制器、扩展和插件。因此不需要 GET 参数。 (我假设您从概览或搜索结果页面开始,并希望链接到详细信息插件。)