我面临的问题相对复杂..
但是在表格中填写的某些字段是由Null by Doctrine ORM在Flush时考虑的。
我想我必须从具体的背景开始。
我正在研究一个适用于三层嵌套集合的“文章”实体。 Article对象有一个“组件”集合(或多或少的列),它们又划分为“章节”(由带有标题的文本组成),最终可以在底部的链接集合中。
我提到这一点,因为它可能是功能障碍的可能原因,因为我的集合JavaScript代码有很大的改进空间。就是这样,我必须指定嵌套的Section集合的代码已经完全可操作。表格正确显示并保存。
我在过去两天一直在努力添加链接嵌套Collection,并且我已经设法使它正常显示(包括用索引重载原型)但是当我尝试提交我的表单时。我在标记为必需/非空的两个字段时遇到问题。表单无法保留,因为这些值为null。但是那些输入字段不是。
链接对象具有“名称”“url”“image”“group”和“section” 最后两个属性在表单之外填充。图像可以为空。 name和url是两个错误的属性。它们不应该被标记为null。
如果您熟悉symfony中的集合原型,您知道原型中的某些文本将被替换为在html标签和属性中显示正确的索引。
例如在我的情况下:
name="article[components][0][sections][0][links][0][URL]"
这是有效的,为此,我将在原型中替换所有出现的以下文本:__name__
,__sectionName__
和__linkName__
。
我的链接原型中有一个错误:链接对象名称值的html name属性中的__slinkName__
。奇怪的是,它使学说接受了该领域的价值。我尝试了错误拼写它不起作用。我尝试错误地输入生成url字段的行,然后再次使doctrine接受另一个字段的值(名称字段),但不接受我输错的那个。
因此我的结论是我的JavaScript存在问题。然而 我在刷新之前做了一个关于jsust的var_dump,字段是正确的。
以下是Controller的摘录,与我刚才描述的内容相符:
foreach ($article->getComponents() as $col){
foreach($col->getSections() as $section){
if ($section instanceof Section && $section->getImage()){
$section->getImage()->setFolder('country/'.$country.'/'.$topic);
}
foreach($section->getLinks() as $link){
$link->setGroup($group);
var_dump($link);
if($link instanceof SectionLink && $link->getImage()){
$link->getImage()->setFolder('country/'.$country);
}
}
die();
}
}
$em->flush();
现在var_dump:
protected 'id' => null
protected 'image' => null
protected 'name' => string 'Google' (length=6)
protected 'url' => string 'www.google.fr' (length=13)
什么可能导致学说将这两个字段视为空? 在这一点上,某些东西阻止了Doctrine知道应该插入到link.name中的值被称为'name'。
我应该补充一点,SectionLink实体继承自Link实体,并为ManyToOne关系添加Section属性。 我过去在继承和教义方面遇到过问题,所以这也是一个可能的领导......
提前感谢那些可以提供帮助的人......我不知道发生了什么......