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 来处理您的表单。