TYPO3 错误“此插件不允许操作”

TYPO3 error «action is not allowed by this plugin»

我正在尝试对我的控制器进行 Ajax 调用。

我在我的表单中放置了一个隐藏的 link,如下所示:

<f:link.action action="ajaxCheckEmailExistsFE" controller="Profiles" class="hidden" id="checkEmailExistsAjaxLink"></f:link.action>

在我的 Javascript 中,我从 link:

中提取 href
var target = $('#checkEmailExistsAjaxLink').attr('href');

然后用jQuery的$.post方法发送我的请求。

当调用 link 时,我得到了臭名昭著的错误

The action \"ajaxCheckEmailExistsFE\" (controller \"Profiles\") is not allowed by this plugin. Please check TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin() in your ext_localconf.php

但是在ext_localconf.php中明确设置了动作!

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    'MyVendor.MyExt',
    'MyPlugin',
    [
        'Profiles' => 'editFE, showFE, updateFE, ajaxCheckEmailExistsFE'
    ],
    // non-cacheable actions
    [
        'Profiles' => 'editFE, showFE, updateFE, ajaxCheckEmailExistsFE'
    ]
);

相同的工作流程在 BE 模式下完美运行。

我在 updateFE-Action 上遇到了同样的问题。提交表单时,我遇到了与上述相同的错误。我不得不将它添加到我的 flexform (-> <numIndex index="1">Profiles-&gt;editFE;Profiles-&gt;updateFE</numIndex>) 中的可切换控制器动作中——这同样很奇怪。

为什么会这样???

这是 TYPO3 9.5

[编辑] 目前,我最终将动作添加到可切换控制器动作,就像我为 updateFE-Action 所做的那样。 但是,这非常麻烦,因为每次添加新操作时我都必须在页面上设置插件操作。 如果有人有更好的解决方案,我将不胜感激!

确实,这很麻烦,但它也是 TYPO3 extbase 控制器中 switchable actions 唯一工作方式 。此检查旨在确保特定操作仅在您处于“正确”插件中时才可调用,因为您可能在一个扩展中有多个插件,然后可能会使用不同的操作。所以最后,这个特性阻止了一个插件调用一个只能在同一扩展的另一个插件中调用的动作。 如果您不需要编辑器来切换插件的动作集,您可以从 flexform 中删除这个配置部分,这将解决需要为新操作编辑它。

举个著名的例子,看看config of the news extension。有一个插件允许列表+详细信息视图,而不同的插件只允许列表或详细信息视图。因此,作为管理员,您必须为不同的新闻设置选择构建您的网站(路由和模板)。

即使在TYPO3社区里,也有voices to get rid of this feature,所以说不定以后的版本会解决