【问题标题】:symfony 2 form validation (without errors)symfony 2 表单验证(无错误)
【发布时间】: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


    【解决方案1】:

    我发现了错误,是的,这是一个虚拟错误。

    我为同样情况下的下一个人发帖:

    我只是忘记在它之后执行 $horaireForm->handle($request)

    $horaireForm = $this->createForm(new HoraireType(), $this->getSeller()->getHoraire());
    

    别忘了通过这个来初始化 $request:

    public function <name your action>Action(Request $request)
    {
    

    Symfony 会自己设置 $request 来处理你的表单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多