2016-08-30 70 views
1

與我以前的帖子Call to a member function addPaiementType() on null,如果我有兩個不同的形式:二formbuilder包括第一formbuilder領域

$form = $app['manager.form'] 
    ->addDuree() 
    ->addPaiementType() 
    ->addTermsAccepted() 
    ->getForm(); 

$formcb = $app['manager.form'] 
    ->addFirstname() 
    ->addLastname() 
    ->addNumero() 
    ->addMonth() 
    ->addYear() 
    ->addCryptogramme() 
    ->getForm(); 

第二種形式的渲染包括之前宣佈的形式領域...它不應該,因爲我已經聲明瞭兩個不同的對象Form。

不明白爲什麼第二種形式包括第一種形式的字段。

但這工作:

//$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

您的通話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();