【问题标题】:update/validate embedded forms before saving in symfony在保存到 symfony 之前更新/验证嵌入的表单
【发布时间】:2011-01-05 05:35:44
【问题描述】:

我想在将嵌入式表单字段保存到数据库之前对其进行验证。目前,如果表单字段为空,它将在数据库中保存一个空值。我允许空字段,但如果表单字段为空,我不想插入任何内容。

还有一个小问题,如何在验证/保存嵌入式表单字段之前更改字段值?

$this->form->getObject 在动作中起作用,但 $this->embeddedForm->getObject 说找不到对象

【问题讨论】:

    标签: php symfony1 symfony-forms


    【解决方案1】:

    我找到了一个非常简单的解决方案。解决方案是手动覆盖 Form 的模型类 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;
            }
        }
    
    }
    

    在本例中,我正在检查名字字段是否为空白。如果不是,则保存表单。如果它是空的,那么我们不会在表单上调用 save 。

    我无法让验证器正常工作,这是一个同样干净的解决方案。

    【讨论】:

      【解决方案2】:

      Symfony 为您提供了一系列进入表单/对象保存过程的钩子。 您可以通过覆盖表单的 doSave() 或 processValues() 函数来使用 null 前/后验证覆盖空白值。

      您可以在此处阅读更多信息:http://www.symfony-project.org/more-with-symfony/1_4/en/06-Advanced-Forms#chapter_06_saving_object_forms

      【讨论】:

      • 我更感兴趣的是避免将表单保存到数据库中,而不是为空白值填写一些内容。这可能吗?
      • 应该很简单。如果您只是调用 $form->isValid() ,则进行验证而不保存。仅当您调用 $form->save() 时才会发生保存
      • 我知道当你调用 $this->form->save();但我的问题是,如果输入为空,我实际上不知道何时不调用它
      猜你喜欢
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多