2013-09-30 15 views
5

Bu gerçekten tuhaf Hakkında Yakalanabilir hata veriyor ve bir Twig şablonu güncellemeden sonra oldu:Symfony2'nin Formu FormView

Kontrolörü Bölüm

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

Şablon Bölüm

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

Hata

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

Gördüğünüz açıkça gibi, ben gerçekten FormView render ve bu RegistrationType() sınıfına ilişkilidir inanmak bana yol açacak boş olduğunu gerçektir, ama hiçbir şey sadece orada, değiştim oluşturulacak şablon

+1

. Şablonda yaptığınız değişiklikleri bize anlatabilir misiniz? –

+0

Aslında bunu çözdüm ve kendi sorumu aşağıda cevaplandırdım. Bileşik form türleriyle ilgili bir sorun olduğu ortaya çıktı. – JRL

cevap

5

Tamam, bu gerçekten belirgindi ve bunu çözdüm, bu yüzden Google'da bunu bulan herkes için burada güncelleme yapacağımı düşündüm.

sorun

formun orijinal uygulama dal bu benzediğini oldu:

{{ form(form) }} 

ne yapar bütün form değişken geçmesi ve görüntülemek için olduğunu şeyi göstermek olduğunu.

Sorun, görünüm değişkenlerimin yanlış olmasıydı.

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

olmalıydı:

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

Bu çağrı anlamına geliyordu: RegistrationType() nesne böyle bir user alanı olarak başka UserType() nesne eklendi çünkü bu idi

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

ana Bu hatayı yakalamamın sebebi, Twig'in verdiği hataların bana hangi form çağrısının başarısız olduğunu söylemediğinden ve otomatik olarak bir, {{ form_start(form) }}. Ancak bu arama gayet iyiydi.

Görüntülenen HTML’ye baktım ve ne kadar uzandığını fark ettim ve bu da sorun olan belirli çizgiyi araştırmamı sağladı.

Twig şablon şimdi şeklinde görünür ve şekilde oluşturuluyor: Önceden yapılmış değildi forma karşı yapılacak bir çağrı neden Twig bir şey eklemiş olabilir

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