2013-09-30 17 views
5

这真是奇怪,更新的树枝模板后,事情发生了:Symfony2的形式给出了捕错误关于FormView控件

控制器部

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

模板部分

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

的错误

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

正如你可以清楚地看到,我确实呈现FormView控件,而事实上,它为空将导致我认为,这是关系到RegistrationType()类,但没有发生变化,因此,只有在模板来呈现?

+1

你可能有一些添加到导致要针对以前没有做的形式进行调用的枝条。你能告诉我们你对模板做了什么改变吗? –

+0

我真的想到了,并在下面回答了我自己的问题。原来这是复合表单类型的问题。 – JRL

回答

5

好吧,这真的很具体,我想通了,所以我想我会更新这里任何人都认为这对谷歌。

的问题是,我原来实行的形式看起来像这样在树枝:

{{ form(form) }} 

这样做是贯穿整form变量,一切都显示,有显示。

的问题是,我的观点的变量是错误的。这是因为RegistrationType()对象增加了一个UserType()对象作为user场这样的:

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

这意味着呼叫:

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

本来应该是:

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

主要原因我没有发现这个错误是因为Twig给出的错误没有告诉我哪个表单称之为失败,我自动认为它是第一个一个,{{ form_start(form) }}。然而那个电话很好。

我看着显示HTML,发现它有多远了,而且引起了我调查的具体行是问题。

树枝模板现在看起来是这样的,正确呈现:

{{ 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) }} 
相关问题