Php TYPO3流体选择属性在提交后仍为空

Php TYPO3流体选择属性在提交后仍为空,php,typo3,fluid,Php,Typo3,Fluid,我正在为我的模型创建一个编辑页面,其中包含以下代码: <f:form action="createEditSave" addQueryString="1" method="POST" object="{activity}" objectName="activity"> <f:form.select property="competence" options="{competences}" prependOptionLabel="" prependOptionValue=""

我正在为我的模型创建一个编辑页面,其中包含以下代码:

<f:form action="createEditSave" addQueryString="1" method="POST" object="{activity}" objectName="activity">

<f:form.select property="competence" options="{competences}" prependOptionLabel="" prependOptionValue="" optionLabelField="name" />

</f:form>

当我提交表单(并在选择中选择一个选项)时,我希望createEditSaveAction中的模型在本例中包含权限。但即使请求中确实包含参数,它仍然为空。我是否错误地认为它应该自动选择对象,并且我必须在createEditSaveAction中自己处理它

我相信我的html是正确的。


提交表单时,我没有收到任何验证错误,并正确发送到我的createEditSaveAction。只有在这里,我希望我的活动模型有一个能力模型,但setCompetency()函数接收到一个空的objectStorage。

取决于将您送回表单时发生了什么:

  • 如果问题是验证错误,则应预先填充该值,因为它将存在于引用请求的请求数据中,然后由ViewHelper读取以确定当前值
  • 如果重定向到编辑操作,则属性值仅存在于所传递的对象上,并且该对象(例如)未在显示表单的操作中指定为模板变量
  • 如果指定
    optionValueField
    属性,它可能会有所帮助,如果为字段显式传递
    值,它也可能会有所帮助
  • 不要忘记,如果您的用例过于专业化而无法满足此要求,那么您可以始终在循环中使用
    f:form.select.option
    手动呈现选项,包括所选属性

最后一句话:从动作的命名来看,似乎有一个动作可以创建和更新对象。这是一种糟糕的做法-您应该为此使用两种不同的操作,在“新建”操作中,您的对象参数应该是可选的,默认情况下为空,在“编辑”中,它应该是强制性的。这也可能是一个很好的机会来检查您的控制器,以确认它确实为所有操作使用了正确声明和注释的参数以及参数类型。如果绕过该框架,表单验证和随后字段值的解析等操作可能不会像您预期的那样工作。

解决了我自己的问题。问题是我的模型中的注释说它是objectStorage。

我的表单也有类似的问题,我必须同时包含名称和属性标记

<f:form.select name="foo" property="foo">
    <f:form.select.option value="bar">Bar</f:form.select.option>
</f:form.select>

酒吧

感谢您的回复,事实上,我正在使用1个操作来创建和更新我的对象。你能进一步澄清为什么这是一种不好的做法吗?我们使用它来节省创建另一个视图的时间。optionValueField没有什么区别,因为我认为默认情况下是使用uid,这应该是好的。我没有收到验证错误,否则我将无法执行createEditSaveAction