symfony 2表单验证(没有错误)

时间:2015-03-17 08:44:55

标签: php forms entity-framework validation symfony

我对这个问题感到很困惑: 我有2个实体,Horaire(Horaire意思是附表)和HoraireLine,其中$ horaire->行是HoraireLine和$ horaireLine-> horaire是Horaire的所有者。

为了坚持我的Horaire的实体,我使用了HoraireLine的形式的HoraireLine形式的集合,但最后一个isValid()以任何方式返回false,我没有得到一旦错误。我检查了表单中的错误,并且子项形成:none。我检查实体'错误:

$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: {  }

我使用级联:["坚持","合并"]因为我需要使用持久级联,但我不知道合并是否有用。 我将教义用于持久化实体。

感谢您提前回答,对不起,如果它是虚假错误x)

1 个答案:

答案 0 :(得分:0)

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

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

我忘了在它之后做$ horaireForm->句柄($ request)

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

不要忘记通过以下方式初始化$ request:

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

Symfony将自行设置处理表格的请求。