这真的很奇怪,它发生在更新Twig模板之后:
控制器部分
$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,而且它是null的事实会让我相信这与RegistrationType()类相关,但是没有任何改变,仅在模板中进行渲染?
答案 0 :(得分:5)
好吧,这是非常具体的,我想出来了,所以我想我会在这里更新任何在Google上发现这一点的人。
问题是我在表格中的原始实现在树枝上看起来像这样:
{{ 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并注意到它有多远,这使我调查了问题的特定行。
Twig模板 now 如下所示并正确呈现:
{{ 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) }}