我有一个复杂的表格问题
这是描述电影(场景,元素,条件等)的模板程序
在元素集合中,我有一个嵌套的集合选项:
我的怪异问题是: 当我提交整个表单时,以下设置方法将发送一个数组而不是一个集合。内容在更新表单上,提交时已设置好收藏集。
/**
* @param Collection $options
* @return Element
*/
public function setOptions($options): Element
{
if (!$options instanceof Collection) {
var_dump($options);
var_dump('fall here');exit;
$this->options = new ArrayCollection($options);
} else {
var_dump($options);
$this->options = $options;
}
return $this;
}
奇怪的事情:
/**
* @param \App\Domain\Toto\Template\Entity\ElementOptions $option
* @return $this
*/
public function addElementOptions(ElementOptions $option): self
{
var_dump('Element::addElementOptions'); exit;
$option->setElement($this);
$this->options->add($option);
return $this;
}
/**
* @param ElementOptions $option
*/
public function removeElementOptions(ElementOptions $option)
{
$this->options->removeElement($option);
}
从不叫。
我的建议是,表单生成器中的by_reference
选项在嵌套集合中不起作用。
但是我真的不知所措,对于我可能错过的建议我将不胜感激。
以下是与此嵌套集合相关的代码:
<one-to-many field="options" target-entity="App\Domain\Toto\Template\Entity\ElementOptions" mapped-by="element" fetch="LAZY">
<cascade>
<cascade-all/>
</cascade>
</one-to-many>
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="App\Domain\Toto\Template\Entity\ElementOptions" table="tpl_element_options">
<id name="id" type="integer" column="id">
<generator strategy="IDENTITY"/>
</id>
<many-to-one field="element" target-entity="App\Domain\Toto\Template\Entity\Element" inversed-by="options" fetch="LAZY">
<join-columns>
<join-column name="element_id" referenced-column-name="id" on-delete="CASCADE"/>
</join-columns>
</many-to-one>
<many-to-one field="type" target-entity="App\Domain\Toto\Template\Entity\Type">
<join-columns>
<join-column name="type_id" referenced-column-name="id" on-delete="CASCADE" nullable="1"/>
</join-columns>
</many-to-one>
<field name="value" type="string" column="value" length="150" precision="0" scale="0" nullable="false">
<options>
<option name="comment">This column stores the value for the option</option>
</options>
</field>
</entity>
</doctrine-mapping>
->add('options', CollectionType::class,
[
'entry_type' => ElementOptionsForm::class,
'by_reference' => false,
'allow_add' => true,
'allow_delete' => true,
'prototype' => true,
'prototype_name' => '__ELEMENT_OPTION__',
'attr' => [
'class' => 'table scene-elements-option',
],
'label' => 'templates.new.form.scene.element.option.title'
]
);
在控制器中,我的表单中填充了以下值:
$form = $this->formFactory->create($type, $data, $options);
$form->handleRequest($this->requestStack->getCurrentRequest());
return $form;