2017-03-24 3 views
0

私たちの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);など...)として扱われます。

答えて

0

私はあなたがこれを行うことができますどのように理解していない:

{% for item in wishlistForm.wishlistItems %} 

私は自分のフォームの宣言のいずれかの「wishlistItems」を参照していないため。 私にとって、このコードはこの行で失敗する必要があります...

+0

ありがとうございました。上記のコードは、コンパクトで読みやすいように少し剥いたものです。必須の部分は削除されず、これは削除されましたが、これはwishlistTypeで実装されています。このコードは私たちのために働き、すべて正常に動作し、ウィッシュリストのすべてのアイテムを聴いています。しかし、時にはこのことについての自動電子メールが届きます。 – Matsooh

関連する問題