Php 不规则Symfony异常:renderBlock()必须是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

我们的Symfony 2项目中有一个奇怪的错误。我们使用Symfony表单,在我们的开发环境中没有任何问题,但在生产过程中确实会收到错误消息。这是一个我们无法复制的错误,而且从未发生过。当我们进行测试(在prod和dev中)时,一切正常,但我们确实收到了发生此错误的通知

我们收到错误通知:

“异常”:“[对象](Symfony\Component\Debug\exception\FatalThrowableError(代码:0):类型错误:传递给Symfony\Component\Form\FormRenderer::renderBlock()的参数1必须是Symfony\Component\Form\FormView的实例,给定null

最重要的代码(精简和可读性)

表单类型:

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中的所有项目。但偶尔我们会自动收到关于此事的电子邮件。