2

埋め込みフォームのカスタム値をルート フォームに保存する際に問題が発生しました。

私は実際に「マニフェスト」を編集でき、「commande_wifi」を好きなだけ追加できます。すべてが保存されています。

「commande_wifi」ごとにプロセスをカスタマイズする必要があります ( object() の他の値に応じて「puht」値があります)。私はそれをするためだけにすでに数時間を失っています。

  1. save() はルートフォームでのみ呼び出されます

それは正しい!ルート フォームだけで 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 Object()にアクセスできるようになりました。

なにか提案を?

4

0 に答える 0