Нестандартное исключение Symfony: renderBlock() должен быть экземпляром FormView, значение null задано

У нас есть странная ошибка в нашем проекте Symfony 2. Мы используем формы Symfony, и у нас нет проблем в нашей среде разработки, но мы получаем сообщения об ошибках в производстве. Ошибка, которую мы не можем воспроизвести и никогда не имели. Все работает нормально, когда мы тестируем (как в prod, так и в dev), но мы получаем уведомления об этой ошибке.

Нас уведомляют об ошибке:

"exception":"[object] (Symfony\Component\Debug\Exception\FatalThrowableError(код: 0): Ошибка типа: аргумент 1, переданный в Symfony\Component\Form\FormRenderer::renderBlock(), должен быть экземпляром Symfony\ Компонент\Форма\Формвиев, значение 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}) }}

Обработка формы выполняется через Ajax, но запрос обрабатывается как обычная форма symfony ($wishlistForm->handleRequest($request); и т.д...).


person Matsooh    schedule 24.03.2017    source источник


Ответы (1)


Я не понимаю, как вы можете это сделать:

 {% for item in wishlistForm.wishlistItems %}

потому что я не вижу никаких 'wishlistItems' в объявлении вашей формы. Для меня этот код должен дать сбой в этой строке...

person Constantin    schedule 24.03.2017
comment
Спасибо за ваш вклад. Приведенный выше код немного урезан, чтобы сделать его компактным и читабельным. Никакие важные части не удаляются, и это было удалено, но это реализовано в списке желаний. Код у нас работает, все работает нормально, также прослушиваются все элементы в списке желаний. Но иногда мы получаем автоматические электронные письма об этом. - person Matsooh; 27.03.2017