symfony 2 表单验证(没有错误)
symfony 2 form validation (without errors)
我对这个问题有点困惑:
我得到了 2 个实体,Horaire(Horaire 的意思是时间表)和 HoraireLine,其中 $horaire->lines 是 HoraireLine 的数组,$horaireLine->horaire 是 Horaire 所有者。
为了持久化我的 Horaire 实体,我在 Horaire 的表单中使用了 HoraireLine 的表单集合,但最后一个 isValid() return false 无论如何我都没有得到一次错误。我检查了表格和子表格中的错误:none。我用 :
检查实体的错误
$validator = $this->get('validator');
$errorList = $validator->validate($this->getSeller()->getHoraire()->getLines());
空数组是 return。但是 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)
我发现了错误,是的,这是一个伪错误。
我 post 下一个处于相同情况的人:
我只是忘了在它之后执行 $horaireForm->handle($request)
$horaireForm = $this->createForm(new HoraireType(), $this->getSeller()->getHoraire());
不要忘记用这个初始化 $request :
public function <name your action>Action(Request $request)
{
Symfony 将自行设置 $request 来处理您的表单。
我对这个问题有点困惑: 我得到了 2 个实体,Horaire(Horaire 的意思是时间表)和 HoraireLine,其中 $horaire->lines 是 HoraireLine 的数组,$horaireLine->horaire 是 Horaire 所有者。
为了持久化我的 Horaire 实体,我在 Horaire 的表单中使用了 HoraireLine 的表单集合,但最后一个 isValid() return false 无论如何我都没有得到一次错误。我检查了表格和子表格中的错误:none。我用 :
检查实体的错误$validator = $this->get('validator');
$errorList = $validator->validate($this->getSeller()->getHoraire()->getLines());
空数组是 return。但是 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)
我发现了错误,是的,这是一个伪错误。
我 post 下一个处于相同情况的人:
我只是忘了在它之后执行 $horaireForm->handle($request)
$horaireForm = $this->createForm(new HoraireType(), $this->getSeller()->getHoraire());
不要忘记用这个初始化 $request :
public function <name your action>Action(Request $request)
{
Symfony 将自行设置 $request 来处理您的表单。