Php 使用typo3 flow将表单提交给不同的操作

Php 使用typo3 flow将表单提交给不同的操作,php,fluid,typo3-flow,Php,Fluid,Typo3 Flow,我有一个用于创建用户的表单页面。用户有一个嗜好,可以在同一页面上通过单击打开创建嗜好页面的第二个按钮创建嗜好。创建嗜好后,在转到嗜好页面之前,应显示上一个用户表单,并插入用户输入 有没有一种方法可以在不使用AJAX的情况下使用typo3 flow/fluid 我试图通过单击createHobby按钮-->将输入提交到另一个操作,该操作将重定向到新的hobby页面,用户可以在该页面中创建爱好,创建后,该操作将重定向回用户表单,其中包含用户已填写的输入字段 我曾经 <input type='s

我有一个用于创建用户的表单页面。用户有一个嗜好,可以在同一页面上通过单击打开创建嗜好页面的第二个按钮创建嗜好。创建嗜好后,在转到嗜好页面之前,应显示上一个用户表单,并插入用户输入

有没有一种方法可以在不使用AJAX的情况下使用typo3 flow/fluid

我试图通过单击createHobby按钮-->将输入提交到另一个操作,该操作将重定向到新的hobby页面,用户可以在该页面中创建爱好,创建后,该操作将重定向回用户表单,其中包含用户已填写的输入字段

我曾经

<input type='submit' value='Create' formaction='/hobby/create' />`

你能再解释一下吗。。。你所展示的内容与typo3无关,我不知道你在哪里插入了它,typo3的哪个版本,使用了额外的扩展名?

你能解释一下吗。。。您显示的内容与typo3无关,我不知道您将其插入了何处,typo3的哪个版本,使用了任何额外的扩展?

我认为使用属性
形式对每种情况都不是一个好的解决方案,因为它没有得到IE<10的支持。我认为还应该考虑JavaScript后端口(在实际提交表单之前,单击第二个按钮时动态更改表单的
action
属性)

关于您的错误,您应该不要使用直接HTML输入,也可能永远不要使用直接HTML输入,而应尝试将重点放在Fluid ViewHelper上,它允许TYPO3创建正确的HTML输入

请尝试以下方法:

<f:form.submit value="Create" additionalAttributes="{formaction: '{f:uri.action(controller: \'hobby\', action: \'create\')}'}" />

我认为使用属性
形式对每种情况都不是一个好的解决方案,因为IE<10没有尽可能地支持它。我认为还应该考虑JavaScript后端口(在实际提交表单之前,单击第二个按钮时动态更改表单的
action
属性)

关于您的错误,您应该不要使用直接HTML输入,也可能永远不要使用直接HTML输入,而应尝试将重点放在Fluid ViewHelper上,它允许TYPO3创建正确的HTML输入

请尝试以下方法:

<f:form.submit value="Create" additionalAttributes="{formaction: '{f:uri.action(controller: \'hobby\', action: \'create\')}'}" />

您可以在
初始化操作中创建一个
$this->forward(…)
,具体取决于您操作的参数

假设您的默认表单操作是“创建”。因此,您需要一个
初始化createAction

public function initializeCreateAction()
{
  if ($this->arguments->hasArgument('createHobby')) {
    $createHobby = $this->request->getArgument('createHobby');
    if ($createHobby) {
      $this->forward('create', 'Hobby', NULL, $this->request->getArguments());
    }
  }
}
现在,您必须将输入命名为
createHobby
,并指定
createAction
此参数:

在流体中:

<f:form.button type="submit" name="createHobby" value="1">Create Hobby</f:form.button>

您可以在
初始化操作中创建
$this->forward(…)
,具体取决于操作的参数

假设您的默认表单操作是“创建”。因此,您需要一个
初始化createAction

public function initializeCreateAction()
{
  if ($this->arguments->hasArgument('createHobby')) {
    $createHobby = $this->request->getArgument('createHobby');
    if ($createHobby) {
      $this->forward('create', 'Hobby', NULL, $this->request->getArguments());
    }
  }
}
现在,您必须将输入命名为
createHobby
,并指定
createAction
此参数:

在流体中:

<f:form.button type="submit" name="createHobby" value="1">Create Hobby</f:form.button>

谢谢你的回复。在提交操作
公共函数createAction(Hobby$newHobby,User$User){
-->时,我仍然会遇到一个错误。在我看来,我尝试将参数作为隐藏字段发送,如
this
,然后作为additionalParams=“{User:'{User}}-->发送,这两个参数都会出现上述错误。仅调用$this->request->getArgument('user');似乎有效…删除隐藏字段和附加参数,但我没有得到完整的项目…只有id。使用
$this->request->getArgument
只能在初始化操作(或转发操作)后获得idid已转换为对象。上面的错误表示url中的控制器和操作无法解决。正如@Romain Canon所述,url必须由fluid viewhelper生成,否则您无法确保获得正确的url。我建议查看您的模板并使用viewhelper创建表单。实际上,您不应该为框架确定一个给定的控制器/操作应该使用哪个URI。您得到的错误是不应该使用的最佳示例。请尝试使用,并告诉我们您是否仍然存在此问题。谢谢各位。它似乎与视图帮助器一起工作,但我仍然无法获取操作的参数。我正在我的视图中执行此操作:
d在控制器
/***@param Hobby$newHobby*@param User | null$userInput*/公共函数createAction(Hobby$newHobby,User$userInput=null)中执行此操作{
var_dump of$userInput返回null…好的,我想我知道了。需要使用视图帮助程序而不是f:form中的参数/additionalParams传递参数。如下所示:
感谢您的回复。我在提交操作
公共函数createAction(Hobby$newHobby,User$User)时仍然会出错{
-->在我看来,我试图将参数作为隐藏字段发送,如
this
和后来作为additionalParams=“{user:'{user}}-->发送,但我都会收到上述错误。仅调用$this->request->getArgument('user'));似乎有效…删除隐藏字段和附加参数,但我没有得到完整的项目…只有id。使用
$this->request->getArgument
只能在初始化操作(或转发操作)后获得idid已转换为对象。上面的错误表示url中的控制器和操作无法解决。正如@Romain Canon所述,url必须由fluid viewhelper生成,否则您无法确保获得正确的url。我建议查看您的模板并使用viewhelper创建表单。实际上,您不应该为框架确定一个给定的控制器/操作应该使用哪个URI。您得到的错误就是一个完美的例子,说明了为什么不应该使用。请尝试使用,并告诉我们您是否仍然存在问题。谢谢大家。它似乎可以与视图帮助器一起使用,但我仍然无法获取参数