sf 1.4 Access&以root形式定制embededObject()

时间:2012-11-03 16:45:54

标签: forms symfony-1.4

我遇到了以root格式保存embededforms的自定义值的问题。

我实际上可以编辑一个"表现形式"我可以尽可能多地添加" commande_wifi"。 一切都很好。

我需要为每个" commande_wifi"定制流程。 (根据对象的其他值(),有一个' puht'值。我已经失去了几个小时才能做到这一点。

  
      
  1. save()仅在根表单上调用
  2.         

    没错!只有根表单调用了save()。因此,如果您要运行其他逻辑,则需要覆盖saveEmbeddedForm方法并在之前调用该代码。前面的过度简化:当您保存带有嵌入表单的表单时,它会调用$ this-> getObject() - > save(),然后调用saveEmbeddedForms,对于每个嵌入表单,调用$ form-> saveEmbeddedForms()然后调用$ form-> getObject() - > save()。这一点至关重要,因为它可以为您节省很多麻烦。   http://jmather.com/2011/01/29/6-things-to-know-about-embedded-forms-in-symfony/

我试图覆盖saveembededForms(),但此时失败了。

class manifestationForm extends BasemanifestationForm
{
  public function configure()
  {
    $this->embedRelation('commande_wifi');

  }

  public function addNewFields($number){
    $new_commandes = new BaseForm();

    for($i=0; $i <= $number; $i+=1){
      $commande = new Commande_wifi();
      $commande->setManifestation($this->getObject());
      $commande_form = new commande_wifiForm($commande);

      $new_commandes->embedForm($i,$commande_form);
    }

    $this->embedForm('new', $new_commandes);
  }

  public function bind(array $taintedValues = null, array $taintedFiles = null){

    $new_commandes = new BaseForm();
    foreach($taintedValues['new'] as $key => $new_commande){
      $commande = new Commande_wifi();
      $commande->setManifestation($this->getObject()); 
      $commande_form = new commande_wifiForm($commande);

      $new_commandes->embedForm($key,$commande_form);
    }

    $this->embedForm('new',$new_commandes);          

    parent::bind($taintedValues, $taintedFiles);
  }

  public function saveEmbeddedForm($con = null, $forms = null)
  {
      if ($con === NULL)
      {
        $con = $this->getConnection();
      }

      if ($forms === NULL)
      {
        $forms = $this->getEmbeddedForms();
      }

      foreach ($forms as $form)
      {
        if ($form instanceof sfFormObject)
        {
          $form->saveEmbeddedForms($con);
          $form->getObject()->setPuht(99);
          $form->getObject()->save($con);
        }
        else
        {
          $this->saveEmbeddedForms($con, $form->getEmbeddedForms());
        }
        //$form->getObject()->setPuht(99)->save();

      }    
  }
}

我很快就赢了,我可以访问embedForm对象()。

有什么建议吗?

0 个答案:

没有答案