我正在开发一个TYPO3后端模块。主要"概述" -Action允许通过ajax上传上传文件,该文件在我的一个控制器中处理。
相应的控制器动作实例化StandaloneView
,呈现它并将呈现的内容写入响应主体。
我的问题是,我在生成的内容中没有设置controllerContext
,因此表单应该触发不同的extbase操作,因为渲染的内容不起作用,因为未设置模块名。
有人可以告诉我如何获取/传递controllerContext,使其在控制器操作中可用,这是通过ajax调用的吗? 最好的问候和提前感谢,奥利弗!
答案 0 :(得分:1)
这里的主要问题是BE模块并没有完全使用标准的View实现 - 在默认实现中,它们包含一个StandaloneView,根据定义它没有控制器上下文。
话虽这么说,如果您可以更改View绕StandaloneView的方式,可以通过执行以下操作来复制控制器上下文:
$view->getRenderingContext()->setControllerContext($parentView->getRenderingContext()->getControllerContext());
或者,您可能希望复制整个渲染上下文而不仅仅是控制器上下文。
建议仅适用于TYPO3v8。在7.6上,您需要复制请求。
对于MVC上下文之外的用法,您需要手动传递原始控制器上下文值,例如控制器名称和模块名称。这意味着值必须是您创建的链接的一部分,并且必须由接收代码读取(以代码的上下文要求的任何方式),然后手动分配给您创建的请求并传递给子视图。请注意,只有当这些MVC上下文值实际发生更改时才需要这样做 - 如果您下次总是调用相同的操作,只需在表单/链接中硬编码所需的扩展名,模块名,控制器名和操作即可获得正确的结果。您从该AJAX控制器渲染的模板。