У нас есть странная ошибка в нашем проекте 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);
и т.д...).