Php 第二个formbuilder包含第一个formbuilder的字段

Php 第二个formbuilder包含第一个formbuilder的字段,php,symfony,silex,Php,Symfony,Silex,与我以前的帖子相关,如果我有两种不同的形式: $form = $app['manager.form'] ->addDuree() ->addPaiementType() ->addTermsAccepted() ->getForm(); $formcb = $app['manager.form'] ->addFirstname() ->addLastname() ->addNumero()

与我以前的帖子相关,如果我有两种不同的形式:

$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();
对我来说,这是完全一样的事情,但似乎不是


感谢您的帮助

您在调用
addXXX
方法时更改了
$app['manager.form']
,而不是复制

如果要将
$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();