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

时间:2016-08-30 21:48:13

标签: php symfony silex

与我之前的帖子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();

对我来说,这是完全相同的,但似乎不是......

感谢您的帮助

1 个答案:

答案 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();