第二个 formbuilder 包括第一个 formbuilder 的字段

Second formbuilder include fields of first formbuilder

与我之前的post相关,如果我有两个不同的形式:

$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'] 作为其他表单的模板保护回调 returns 对象在从应用程序获取 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();