Php 不规则Symfony异常:renderBlock()必须是FormView的实例,给定null
我们的Symfony 2项目中有一个奇怪的错误。我们使用Symfony表单,在我们的开发环境中没有任何问题,但在生产过程中确实会收到错误消息。这是一个我们无法复制的错误,而且从未发生过。当我们进行测试(在prod和dev中)时,一切正常,但我们确实收到了发生此错误的通知 我们收到错误通知: “异常”:“[对象](Symfony\Component\Debug\exception\FatalThrowableError(代码:0):类型错误:传递给Symfony\Component\Form\FormRenderer::renderBlock()的参数1必须是Symfony\Component\Form\FormView的实例,给定null 最重要的代码(精简和可读性) 表单类型:Php 不规则Symfony异常:renderBlock()必须是FormView的实例,给定null,php,symfony,symfony-forms,symfony-2.8,Php,Symfony,Symfony Forms,Symfony 2.8,我们的Symfony 2项目中有一个奇怪的错误。我们使用Symfony表单,在我们的开发环境中没有任何问题,但在生产过程中确实会收到错误消息。这是一个我们无法复制的错误,而且从未发生过。当我们进行测试(在prod和dev中)时,一切正常,但我们确实收到了发生此错误的通知 我们收到错误通知: “异常”:“[对象](Symfony\Component\Debug\exception\FatalThrowableError(代码:0):类型错误:传递给Symfony\Component\Form\Fo
class WishlistType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('rank', HiddenType::class)
->add('description', TextType::class)
// Image is deprecated and will be removed.
->add('image');
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'data_class' => Item::class,
]
);
}
}
控制器:
public function showAction(Request $request, $url)
{
/** @var Participant $participant */
$participant = $this->get('participant_repository')->findOneByUrl($url);
if ($participant === null) {
throw new NotFoundHttpException();
}
$wishlistForm = $this->createForm(
WishlistType::class,
$participant,
[
'action' => $this->generateUrl(
'wishlist_update',
['url' => $participant->getUrl()]
),
]
);
if (!$request->isXmlHttpRequest()) {
return [
'entry' => $participant,
'wishlistForm' => $wishlistForm->createView(),
];
}
}
细枝模板:
{{ form_start(wishlistForm, {'attr': {'id': 'add_item_to_wishlist_form'}}) }}
{{ form_row(wishlistForm._token) }}
<table>
<!-- ADD SOMETHING TO YOUR WISHLIST -->
<thead>
<tr>
<th>#</th>
<th>{{ 'entry_show_valid.label.description'|trans }}</th>
<th>
<button type="button" class="btn btn-mini btn-success add-new-entry">
{{ 'entry_show_valid.btn.add_wishlist'|trans }}
</button>
</th>
</tr>
</thead>
<!-- OVERVIEW OF ITEMS IN WISHLIST, AND POSSIBILITY TO REMOVE SINGLE ITEMS-->
<tbody>
{% for item in wishlistForm.wishlistItems %}
<tr>
<td>{{ form_widget(item.rank) }}
<span>{{ item.rank.vars.value }}</span>
</td>
<td>
{{ form_widget(item.description, {'attr': {'class': 'wishlistitem-description'} }) }}
</td>
<td>
<button type="submit" >
<span>{{ 'entry_show_valid.btn.update_item'|trans }}</span>
</button>
<button type="button">
<span>{{ 'entry_show_valid.btn.remove_item'|trans }}</span>
</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{{ form_end(wishlistForm, {'render_rest': false}) }}
{form_start(wishlistForm,{'attr':{'id':'add_item_to_wishlist_form'}}}}
{{form_row(wishlistForm._token)}
#
{{'entry_show_valid.label.description'| trans}}
{{'entry_show_valid.btn.add_wishlist'| trans}}
{wishlistForm.wishlistItems%中项目的%s}
{{form_小部件(item.rank)}
{{item.rank.vars.value}
{{form_小部件(item.description,{'attr':{'class':'wishlistitem description'}}}}}
{{'entry_show_valid.btn.update_item'| trans}}
{{'entry_show_valid.btn.remove_item'| trans}}
{%endfor%}
{form_end(wishlistForm,{'render_rest':false}}}
表单处理是通过Ajax完成的,但请求是作为常规的symfony表单来处理的(
$wishlistForm->handleRequest($request);
等…)。我不明白您如何做到这一点:
{% for item in wishlistForm.wishlistItems %}
因为我在您的表单声明中没有看到任何“愿望列表”。
对我来说,这段代码必须在这一行失败…谢谢你的输入。上面的代码有点精简,以保持紧凑和可读性。没有删除任何重要部分,这已经被删除,但这是在wishlistType中实现的。这段代码对我们有效,一切正常,还可以侦听wishlist中的所有项目。但偶尔我们会自动收到关于此事的电子邮件。