我遇到了以root格式保存embededforms的自定义值的问题。
我实际上可以编辑一个"表现形式"我可以尽可能多地添加" commande_wifi"。 一切都很好。
我需要为每个" commande_wifi"定制流程。 (根据对象的其他值(),有一个' 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对象()。
有什么建议吗?