TYPO3 将控制器上下文传递给 ajax 请求

TYPO3 pass controller context to ajax request

我正在开发 TYPO3 后端模块。主要 "overview"-Action 允许通过 ajax 上传上传文件,该文件在我的一个控制器中进行处理。

相应的controller-action实例化一个StandaloneView,渲染它,并将渲染的内容写入响应体。 我的问题是,我没有在生成的内容中设置 controllerContext,因此应该触发不同的 extbase 操作的表单在呈现的内容中不起作用,因为未设置模块名称。

谁能告诉我如何 get/pass controllerContext,使其在通过 ajax 调用的控制器操作中可用? 最诚挚的问候和提前致谢,奥利弗!

这里的主要问题是 BE 模块并没有完全使用标准的 View 实现——在默认实现中,它们围绕着 StandaloneView,根据定义,它没有控制器上下文。

话虽如此,如果您可以更改 View 环绕 StandaloneView 的方式,则可以通过以下方式复制控制器上下文:

$view->getRenderingContext()->setControllerContext($parentView->getRenderingContext()->getControllerContext());

或者,您可能想要复制整个渲染上下文,而不仅仅是控制器上下文。

建议仅适用于 TYPO3v8。在 7.6 上,您将需要改为复制请求。

对于 MVC 上下文之外的用法,您需要手动传递原始控制器上下文值,例如控制器名称和模块名称。这意味着这些值必须是您创建的 link 的一部分,并且必须由接收代码读取(以代码上下文需要的任何方式),然后手动分配给您创建的请求并传递给子视图。请注意,这仅在那些 MVC 上下文值实际更改时才有必要 - 如果您接下来总是调用相同的操作,则只需在 form/link 在您从 AJAX 控制器呈现的模板中。