我在Symfony嵌套表格中有点不知所措..
我有事件和角色条目,即人或组织可以对事件发挥的作用......
所以我有一个EventType表单,带有嵌套的RoleEntryType:
->addEventListener(FormEvents::PRE_SET_DATA,
function (FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
$form->add('roleEntries', 'collection', array(
'type' => new RoleEntryType($data),
'allow_add' => true,
'allow_delete' => true
));
}
)
$ Data变量由RoleEntryType构造函数捕获:
$this->data=$data;
我尝试添加一个隐藏字段(因为用户不应该在字段中修改它):
->add($this->targetScope, 'hidden', array('data'=>$this->data))
此时,Symfony不满意,因为它无法将$ data转换为字符串
在第13行的form_div_layout.html.twig中呈现模板期间抛出异常(“Catchable Fatal Error:类IH \ EventManagerBundle \ Entity \ Event的对象无法转换为字符串”) 。
所以我试着给它一个Id
->add($this->targetScope, 'hidden', array('data'=>$this->data->getId()))
但它不起作用,因为字符串不够,它想要一个完全成熟的事件:
可捕获的致命错误:传递给IH \ EventManagerBundle \ Entity \ RoleEntry :: setEvent()的参数1必须是IH \ EventManagerBundle \ Entity \ Event的实例,在/ Users / MTP / Documents中调用给定的字符串第410行的/dev/MTP/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php并定义了
所以我猜我做错了......
帮助!
答案 0 :(得分:0)
$ data包含表单数据,因此您需要提取字段值并将其作为隐藏字段的值传递:
$form->add('targetScope', 'hidden', array('data' => $data['field_name']));
答案 1 :(得分:0)
如果不更改初始植入,只需向Event实体添加__to string()
魔术方法,所有方法都应按预期工作
像
这样的东西Class Event
{
[...]
public function __toString()
{
return $this->name;
}
}
当然$this->name;
应根据您的对象属性进行更改。
如果您在发布表单时需要重新创建(或从db获取)实体对象,请查看DataTransformers
答案 2 :(得分:0)
感谢您的所有回复,
所以使用DataTransformer或创建一个新的字段类型(EntityHidden)都可以...但是,我的问题来自于我在代码中忘记的东西,这迫使我在FormType而不是实体中处理这个... < / p>
简单地说,没有必要将对应于嵌套表单(Event)的实体的主键传递给嵌套表单(RoleEntryType)...如果我告诉我的Event实体setter它应该写一个引用新RoleEntry中的事件:
public function addRoleEntry(
{
$this->roleEntries[] = $roleEntry;
$roleEntry->setEvent($this);
return $this;
}
很抱歉,如果我的问题不清楚,感谢您花时间回答!