2013-09-30 6 views
5

Das ist wirklich seltsam, und es geschah, nachdem ein Zweig Vorlage Aktualisierung:Symfony2 Form gibt Abfangbare Fehler Über Formview

der Steuerteil

$registration = new Registration(); 
    $form = $this->createForm(new RegistrationType(), $registration, array(
     'action' => $this->generateUrl('account_create'), 
    )); 

    return $this->render(
     'AcmeCommonBundle:Security:register.html.twig', 
     array(
      'form' => $form->createView(), 
      'contentBackColor' => 'canvasGreen' 
      ) 
    ); 

Die Vorlage Teil

{{ form_start(form) }} 
    {{ form_errors(form) }} 

    <p>All Fields Are Required</p> 

    <div class="form-row"> 
     {{ form_label(form.firstname, "First Name") }} 
     {{ form_widget(form.firstname) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.firstname) }} 
    </div> 

    <div class="form-row"> 
     {{ form_label(form.lastname, "Last Name") }} 
     {{ form_widget(form.lastname) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.lastname) }} 
    </div> 

    <div class="form-row"> 
     {{ form_label(form.username, "Username") }} 
     {{ form_widget(form.username) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.username) }} 
    </div> 

    <div class="form-row"> 
     {{ form_label(form.email, "Email") }} 
     {{ form_widget(form.email) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.email) }} 
    </div> 

    <div class="form-row"> 
     {{ form_label(form.password, "Password") }} 
     {{ form_widget(form.password) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.password) }} 
    </div> 

    <div class="form-row"> 
     {{ form_label(form.confirm, "Confirm Password") }} 
     {{ form_widget(form.confirm) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.confirm) }} 
    </div> 

    <div class="form-row"> 
     {{ form_label(form.terms, "Terms & Conditions") }} 
     {{ form_widget(form.terms) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.terms) }} 
    </div> 

{{ form_end(form) }} 

Der Fehler

Argument 1 passed to Symfony\Component\Form\FormRenderer::searchAndRenderBlock() must be an instance of Symfony\Component\Form\FormView, null given 

Wie man deutlich sehen kann, ich tatsächlich bin Rendern der Formview, und die Tatsache, dass es mich null ist führen würde, zu glauben, dass dies auf die RegistrationType verwandt ist() der Klasse, aber nichts verändert es, nur in der Vorlage zum Rendern?

+1

Sie haben etwas zu dem Zweig hinzugefügt werden, die einen Anruf verursacht gegen die Form hergestellt werden, die vorher nicht gemacht wurde. Können Sie uns mitteilen, welche Änderungen Sie an der Vorlage vorgenommen haben? –

+0

Ich fand es heraus und beantwortete meine eigene Frage unten. Es stellte sich heraus, dass es ein Problem mit zusammengesetzten Formulartypen war. – JRL

Antwort

5

In Ordnung, das war wirklich spezifisch und ich fand es heraus, also dachte ich, ich würde hier für jeden aktualisieren, der das bei Google findet.

Das Problem war, dass meine ursprüngliche Implementierung der Form, wie dies in Zweig sah:

{{ form(form) }} 

Was das bedeutet ist die ganzen form Variable gehen und alles zeigt, dass es angezeigt war.

Das Problem war, dass meine Ansicht Variablen falsch waren. Das war, weil das RegistrationType() Objekt ein anderes UserType() Objekt als user Feld wie folgt hinzugefügt:

->add('user', new UserType()) 

bedeutete dies, dass der Anruf:

{{ form_label(form.firstname, "First Name") }} 

gewesen sein sollte:

{{ form_label(form.user.firstname, "First Name") }} 

die Haupt Der Grund, warum ich diesen Fehler nicht bemerkt habe, ist, dass die Fehler, die Twig gibt, mir nicht verraten haben, bei welcher Form es fehlgeschlagen ist, und ich nahm automatisch an, dass es der erste war eins, {{ form_start(form) }}. Aber dieser Anruf war in Ordnung.

Ich schaute auf das angezeigte HTML und bemerkte, wie weit es kam, und das veranlasste mich, die bestimmte Linie zu untersuchen, die das Problem war.

Der Zweig Vorlage jetzt sieht so und macht richtig:

{{ form_start(form) }} 
    {{ form_errors(form) }} 

    <p>All Fields Are Required</p> 

    <div class="form-row"> 
     {{ form_label(form.user.firstname, "First Name") }} 
     {{ form_widget(form.user.firstname) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.user.firstname) }} 
    </div> 

    <div class="form-row"> 
     {{ form_label(form.user.lastname, "Last Name") }} 
     {{ form_widget(form.user.lastname) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.user.lastname) }} 
    </div> 

    <div class="form-row"> 
     {{ form_label(form.user.username, "Username") }} 
     {{ form_widget(form.user.username) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.user.username) }} 
    </div> 

    <div class="form-row"> 
     {{ form_label(form.user.email, "Email") }} 
     {{ form_widget(form.user.email) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.user.email) }} 
    </div> 

    <div class="form-row"> 
     {{ form_label(form.user.password.password, "Password") }} 
     {{ form_widget(form.user.password.password) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.user.password.password) }} 
    </div> 

    <div class="form-row"> 
     {{ form_label(form.user.password.confirm, "Confirm Password") }} 
     {{ form_widget(form.user.password.confirm) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.user.password.confirm) }} 
    </div> 

    <div class="form-row"> 
     {{ form_label(form.terms, "Terms & Conditions") }} 
     {{ form_widget(form.terms) }} 
     <div class="clear-fix"></div> 
    </div> 
    <div class="form-errors-row"> 
     {{ form_errors(form.terms) }} 
    </div> 

{{ form_end(form) }}