与我之前的帖子Call to a member function addPaiementType() on null相关,如果我有两种截然不同的形式:
$form = $app['manager.form']
->addDuree()
->addPaiementType()
->addTermsAccepted()
->getForm();
$formcb = $app['manager.form']
->addFirstname()
->addLastname()
->addNumero()
->addMonth()
->addYear()
->addCryptogramme()
->getForm();
第二种形式的渲染包括在它之前声明的形式的字段......它不应该,因为我已经声明了两个不同的对象形式。
不要理解为什么第二种形式包含第一种形式的字段。
但这有效:
//$form = $app['manager.form']
$f1 = new Form($app);
$form = $f1
->addDuree()
->addPaiementType()
->addTermsAccepted()
->getForm();
//$formcb = $app['manager.form']
$f2 = new Form($app);
$formcb = $f2
->addFirstname()
->addLastname()
->addNumero()
->addMonth()
->addYear()
->addCryptogramme()
->getForm();
对我来说,这是完全相同的,但似乎不是......
感谢您的帮助
答案 0 :(得分:1)
您在调用$app['manager.form']
方法时更改addXXX
,而不是复制。
如果希望将$app['manager.form']
作为其他表单的模板保护回调,则返回对象以从应用程序获取manager.form
时获得回调。
$app['manager.form'] = $app->protect(function() use ($app) {
return new Form($app);
});
$form = $app['manager.form']();
$form = $form
->addDuree()
->addPaiementType()
->addTermsAccepted()
->getForm();
$formcb = $app['manager.form']();
$formcb = $formcb
->addFirstname()
->addLastname()
->addNumero()
->addMonth()
->addYear()
->addCryptogramme()
->getForm();