2013-09-30 13 views
5

To jest naprawdę dziwne, i stało się to po aktualizacji szablonu Gałązka:Symfony2 Formularz Daje połów error O FormView

Kontroler Część

$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' 
      ) 
    ); 

Part Szablon

{{ 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) }} 

Błąd

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

Jak można wyraźnie zobaczyć, ja rzeczywiście renderowania FormView, a fakt, że jest to wartość null doprowadziłoby mnie do przypuszczenia, że ​​jest to związane z RegistrationType() klasy, ale nic nie zmieniło, tylko w szablon do renderowania?

+1

mogłeś dodać coś do Gałązka, który spowodował wywołanie być wykonany przed formularzu, który wcześniej nie został złożony. Czy możesz nam powiedzieć, jakie zmiany wprowadziłeś w szablonie? –

+0

Wyliczyłem to właściwie i odpowiedziałem na moje własne pytanie poniżej. Okazało się, że był to problem z typami złożonych formularzy. – JRL

Odpowiedz

5

W porządku, to było naprawdę specyficzne i znalazłem to, więc pomyślałem, że zaktualizuję tutaj każdego, kto znajdzie to w Google.

Problemem było to, że mój oryginalny realizacja formie wyglądało to na gałązce:

{{ form(form) }} 

Co to robi jest przejść przez cały zmiennej form i wyświetla wszystko, co nie było wyświetlić.

Problem polegał na tym, że moje zmienne widoku były błędne. To dlatego, że przedmiotem RegistrationType() dodaje inny UserType() obiekt jako user dziedzinie jak ten:

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

Oznaczało to, że wywołanie:

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

powinny były:

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

Głównym powodem, dla którego nie złapałem tego błędu, jest to, że błędy, które podaje Twig, nie mówiły mi, która forma wywołania się nie powiodła, i automatycznie założyłem, że to był pierwszy jeden, {{ form_start(form) }}. Jednak połączenie było w porządku.

Spojrzałem na wyświetlony HTML i zauważyłem, jak daleko się ono dostało, co zmusiło mnie do zbadania konkretnej linii, która była problemem.

gałązka szablon teraz wygląda i renderuje poprawnie:

{{ 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) }} 
Powiązane problemy