2016-08-30 7 views
1

Verwandte zu meinem vorherigen Post Call to a member function addPaiementType() on null, wenn ich zwei unterschiedliche Form haben:Zweite Formbuilder umfassen Felder der ersten Formbuilder

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

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

Die von der zweiten Form machen umfassen die Felder der, bevor er erklärt Form ... Es sollte nicht, weil ich zwei verschiedene Objekt Form erklärt habe.

Verstehen Sie nicht, warum die zweite Form die Felder der ersten einschließen.

Aber das funktioniert:

//$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(); 

Für mich ist es genau das gleiche, aber es scheint nicht ...

Vielen Dank für Hilfe

Antwort

1

Sie ändern $app['manager.form']addXXX beim Aufruf Methoden, nicht kopieren.

Wenn Sie $app['manager.form'] als Vorlage für andere Formulare beibehalten möchten, schützen Sie den Rückruf, der das Objekt zurückgibt, um den Rückruf selbst zu erhalten, wenn Sie manager.form aus der Anwendung abrufen.

$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(); 
Verwandte Themen