埋め込みフォームのカスタム値をルート フォームに保存する際に問題が発生しました。
私は実際に「マニフェスト」を編集でき、「commande_wifi」を好きなだけ追加できます。すべてが保存されています。
「commande_wifi」ごとにプロセスをカスタマイズする必要があります ( object() の他の値に応じて「puht」値があります)。私はそれをするためだけにすでに数時間を失っています。
- 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()にアクセスできるようになりました。
なにか提案を?