私たちのSymfony 2プロジェクトには奇妙なエラーがあります。私たちはSymfonyフォームを使用しており、私たちの開発環境には問題はありませんが、生産上のエラーメッセージを受け取ります。私たちは複製することができず、決して生き残れなかったエラーです。私たちがテストすると(すべて& devのプロダクトで)うまく動作しますが、このエラーが発生したという通知を受け取ります。不規則なsymfony例外:renderBlock()はFormViewのインスタンスでなければなりません。
我々は、エラーが通知されます
"exception":"[object] (Symfony\Component\Debug\Exception\FatalThrowableError(code: 0): Type error: Argument 1 passed to Symfony\Component\Form\FormRenderer::renderBlock() must be an instance of Symfony\Component\Form\FormView, null given
最も影響力のあるコード(コンパクト&読みやすくするために剥奪)
にformType:
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);
など...)として扱われます。
ありがとうございました。上記のコードは、コンパクトで読みやすいように少し剥いたものです。必須の部分は削除されず、これは削除されましたが、これはwishlistTypeで実装されています。このコードは私たちのために働き、すべて正常に動作し、ウィッシュリストのすべてのアイテムを聴いています。しかし、時にはこのことについての自動電子メールが届きます。 – Matsooh