【发布时间】:2015-03-17 08:44:55
【问题描述】:
我对这个问题有点困惑: 我有 2 个实体,Horaire(Horaire 的意思是 Schedule)和 HoraireLine,其中 $horaire->lines 是 HoraireLine 的数组,而 $horaireLine->horaire 是 Horaire 的所有者。
为了保持我的 Horaire 实体,我在 Horaire 的表单中使用了 HoraireLine 表单的集合,但最后一个 isValid() 以任何方式返回 false,我没有得到一次错误。我检查了表格中的错误,以及孩子的表格:无。我检查实体的错误:
$validator = $this->get('validator');
$errorList = $validator->validate($this->getSeller()->getHoraire()->getLines());
并返回一个空数组。但是 form->isValid() 仍然是假的。
我没有设置详细信息验证器。
这是我的代码(在我的控制器中):
[...]
/*
* Horaire's form (about horaireLines)
*/
/*
* Init Horaire's lines threatment
* (for don't get null horaire line)
* @Unlegit indent
*/
if($this->getSeller()->getHoraire()->getLines()){
foreach (EnumDay::getEnum() as $k => $day) {
$this->getSeller()->getHoraire()->addLine(new HoraireLine( $this->getSeller()->getHoraire(), $day, null, null, null, null ));
}
}
$horaireForm = $this->createForm(new HoraireType(), $this->getSeller()->getHoraire());
$validator = $this->get('validator');
$errorList = $validator->validate($this->getSeller()->getHoraire()->getLines());
var_dump($errorList);
if ($horaireForm->isValid()) {
$em->persist($this->getSeller()->getHoraire());
/*foreach ($this->getSeller()->getHoraire()->getLines() as $key => $value) {
$em->persist($value);
}*/
}
[...]
$this->getSeller() 是当前用户拥有的对象的快捷方式,通过安全上下文获取。
这里是实体的 yaml:
Ctx\BaoBundle\Entity\HoraireLine:
type: entity
table: null
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
am_opening:
type: time
nullable: true
am_closing:
type: time
nullable: true
pm_opening:
type: time
nullable: true
pm_closing:
type: time
nullable: true
day:
type: object
manyToOne:
horaire:
targetEntity: Horaire
inversedBy: lines
cascade: ["persist", "merge"]
joinColumn:
name: horaire_id
referencedColumnName: id
lifecycleCallbacks: { }
Ctx\BaoBundle\Entity\Horaire:
type: entity
table: null
id:
id:
type: integer
id: true
generator:
strategy: AUTO
oneToOne:
seller:
targetEntity: Seller
inversedBy: horaire
joinColumn:
name: seller_id
referencedColumnName: id
cascade: ["persist", "merge"]
oneToMany:
lines:
targetEntity: HoraireLine
mappedBy: horaire
cascade: ["persist", "merge"]
lifecycleCallbacks: { }
我使用 cascade: ["persist", "merge"] 因为我需要使用persist cascade,但我不知道合并是否有用。 我将教义用于持久实体。
感谢您提前回答,如果这是一个虚拟错误,我们深表歉意 x)
【问题讨论】:
标签: php forms entity-framework validation symfony