2011-01-05 46 views
1

我想在嵌入表单域被保存到数据库之前验证嵌入式表单域。目前,如果表单字段为空,它会将一个空值保存到数据库中。我允许空字段,但如果表单字段为空,我不需要插入任何内容。在保存到symfony之前更新/验证嵌入表单

也很快的问题,如何在验证/保存嵌入式表单字段之前更改字段值?

$这个 - >形式 - >的getObject工作在行动,但$这个 - > embeddedForm->的getObject说找不到对象

回答

1

我发现了一个非常简单的解决方案。解决方案是手动覆盖您的表单的模型类save()方法。

class SomeUserClass extends myUser { 

public function save(Doctrine_Connection $conn = null) 
    { 
     $this->setFirstName(trim($this->getFirstName())); 
     if($this->getFirstName()) 
     { 
       return parent::save(); 
     }else 
     { 
       return null; 
     } 
    } 

} 

在这个例子中,我检查firstname字段是否为空。如果不是,则保存表单。如果它是空的,那么我们不会在窗体上调用保存。

我还没有能够使验证器正常工作,这是一个同样干净的解决方案。

0

Symfony的给你一堆钩子成/对象保存过程的形式。 可以通过覆盖表单的doSave()或processValues()函数,使用空前/后验证来覆盖空值。

你可以阅读更多关于它在这里:http://www.symfony-project.org/more-with-symfony/1_4/en/06-Advanced-Forms#chapter_06_saving_object_forms

+0

我更愿意避免将表单保存到数据库中,而不是填充空白值。那可能吗? – 2011-01-05 18:00:02

+0

这应该很简单。如果你只是打电话给$ form-> isValid()是有效的而不保存。保存仅在调用$ form-> save()时发生 – xzyfer 2011-01-07 00:14:41

+0

我知道在调用$ this-> form-> save()时会发生保存。但我的问题是,如果输入是空的,我实际上不知道何时不调用它 – 2011-01-07 00:43:16