TYPO3 Formframework:使用ViewHelper渲染表单时指定FormFrontend控制器
解决TYPO3表单渲染时提交目标控制器错误的问题
要让表单提交到Form扩展的FormFrontend控制器的perform动作,你需要在渲染表单时显式指定路由所需的完整参数,而不仅仅是action。以下是两种可行的实现方式:
方式一:在Fluid模板中通过overrideConfiguration覆盖配置
在使用formvh:form.render时,通过overrideConfiguration覆盖表单定义的renderingOptions,指定extensionName、pluginName、controllerName和controllerAction:
{formvh:form.render( formIdentifier: 'mycustomform', overrideConfiguration: { formDefinition: { renderingOptions: { extensionName: 'form', pluginName: 'Formframework', controllerName: 'FormFrontend', controllerAction: 'perform' } } } )}
这样配置后,表单的action属性会自动生成指向tx_form_formframework的正确路由,表单提交后会由Form扩展的控制器处理,你的finisher配置也会生效。
方式二:直接在表单YAML定义中配置渲染选项
如果不需要动态修改,可以直接在mycustomform.form.yaml里的renderingOptions中指定目标控制器参数:
type: Form identifier: mycustomform label: '自定义表单' renderingOptions: extensionName: 'form' pluginName: 'Formframework' controllerName: 'FormFrontend' controllerAction: 'perform' # 表单字段配置 renderables: - type: Page identifier: page-1 renderables: # 你的表单字段 # Finisher配置 finishers: - identifier: EmailToReceiver options: # 你的邮件配置
关键说明
TYPO3的表单路由依赖extensionName、pluginName、controllerName和controllerAction四个参数来确定处理请求的控制器。如果你的模板是在自定义扩展的插件上下文里渲染,表单会默认继承当前插件的路由参数,导致提交到自己的扩展控制器。显式覆盖这四个参数就能强制表单使用Form扩展的控制器处理提交请求。
内容的提问来源于stack exchange,提问作者Stefan Padberg
相关产品推荐
相关产品推荐

