我有一个名为"Mail"的普通模型:
Namespace ...
use TYPO3CMSExtbaseDomainObjectAbstractEntity;
class Mail extends AbstractEntity
{
/**
* @var string
*/
protected $name;
protected $company;
.../**
* @var string
*/
protected $company;
...
我想在表单中使用它:
<f:form action="post" object="{mail}">
<f:form.textfield property="name"/>
...
</f:form>
第一个奇怪的事情是,viewhelper生成的html是:
<input name="tx_myext_offer[name]">
但是为了工作,它应该是:
<input name="tx_myext_offer[mail][name]">
所以我尝试使用名称属性手动编写输入字段的 html,例如"tx_myext_offer[邮件][名称]"。当我现在将表单发送到控制器时,出现错误:
#1297759968: Exception while property mapping at property path "": It is not allowed to map property "name". You need to use $propertyMappingConfiguration->allowProperties('name') to enable mapping of this property.
当我调试请求的 PropertyMappingConfiguration 对象时,我看到"propertiesNotToBeMapped"属性为空。应该有邮件模型的属性。
不知何故,extbase 这次不会自动映射它。似乎我在某处错过了一些东西。如何告诉extbase自动映射模型的属性?
@ThomasLöffler
在调用表单的控制器 Action 中,没有任何令人兴奋的事情发生:
公共函数显示操作(({
$this->view->assignMultiple(
[
'mail' => $this->objectManager->get(Mail::class)
]
);
}
第一件事。您错过了<f:form />
标记中的属性objectName="mail"
。
当您添加此属性时,隐藏字段tx_myext_offer[__trustedProperties]
和其他一堆字段将发生变化,然后您的自动属性映射应该可以工作。