2016-12-13 16 views
0

symfonyのようなフレームワークで作業するのは非常に新しいですが、私は非常に速くファンになっていると言わなければなりません。残念ながら、私は最後の数日間ずっと続けられています。選択されたオプションがEntityType :: classに設定されていないformfield symfony3

私はsymfony3フレームワークに私の古い学校のPHPのCMSをリファクタリングしようとしているコンテキスト
。ユーザーは、彼のページを編集することを追加することによって彼のページを管理することができます。新しいページをデータベースに追加することは、魅力のように機能します。ページの編集もうまくいきますが、1つの小さな部分は例外です。フォームは必要なようにフィールドを事前入力し、投稿はエンティティを編集します。

...何らかの理由で、選択ボックスは選択されたtemplatetypeであらかじめ選択されません。このリストはEntityType :: classを使用してビルドされ、AppBundle:Templatesを使用してデータベースから利用可能なデータを取得します。

私はロードに使用すると、フォームを構築するコードの一部:

// Fetch selected page 
    $page = $this->getDoctrine()->getRepository('AppBundle:PageMan')->find($id);   

    // Generate form 
    $form = $this->createFormBuilder($page) 
     ->add('templateId', EntityType::class, array(
     'label' => 'Template type', 
     'class' => 'AppBundle:Templates', 
     'placeholder' => 'Kies een template', 
     'choice_label' => 'name', 
     'choice_value' => 'id', 
     'multiple' => false, 
     'expanded' => false, 
     'required' => true, 
     ))->getForm(); 

私は考えるとGoogleの可能性があり、すべての可能性を試してみましたが、最後の数日間。

  • れるtemplateIdリポジトリをロードした後の値で満たされている:私はまた、次のようにチェックしました。フィールドをプレーンテキストフィールドに変更すると、値が表示されます。
  • AppBundle:casheはdoesnの取り外し転記(離れるリダイレクトしない)場合に選択=「選択」属性が設定されている
  • (ID 1および2を使用してデータベースに2つだけのエンティティの)一意の値を返しテンプレート

彼の瞬間私は可能な解決策から外れています、誰かが助けることを願っています。それはとてもシンプルなものかもしれませんが、私はもうそれを見ていません。

--Update--
だけで生成されたフォームのvardumpで、次の矛盾を発見しました。 'name'オブジェクトには、modelData、normData、およびviewDataが事前に入力されています。しかし、 'templateId'はviewDataの内容を失います。 symfonyののドキュメントで

screenshot vardump formbuilder

それはfolowingを述べた:

View Data - This is the format that's used to fill in the form fields themselves. It's also the format in which the user will submit the data. When you call Form::submit($data), the $data is in the "view" data format. Source

これは解決策に可能LEEDである可能性があります。 \ベンダーで

--update 2--
ただ、ハードコードされます$ this-> ViewDataを\ symfonyの\ symfonyの\ SRC \ symfonyの\コンポーネント\フォーム\ Form.php選択ボックスに存在しているハードコードされた値に。これにより、上のアップデートで説明した空の設定に値が追加されます。これでデフォルト値が選択されます。コードでこの変数に従います。それがなぜあらかじめ満たされているのかという理由を見つけることを願っています。あなたが機能を行うことができますので、実際に

+0

は 'templateId'はあなたPageManエンティティに存在していますか? –

+0

@AlvinBunk、あなたの迅速な対応に感謝します。はい、そうです。 6 -name: "のNieuweナーム" -templateId: "2" -url: "nieuwe_url" -title: "plaatjes" ここでiはpageload 'PageMan {#379▼ -idに印刷vardumpであります -inMenu:真 -active:真 -sitemap:真 -metaDescr: "fdgfdgfdg" -metaKeywords: "FDGF" は} '私は、文字列としてそれを試してみましたが、 – MadHouse

+0

をint型てきた私は思ったんだけど「'場合choice_value '=> $ page-> getId()、 'はエラーを取り除くでしょうか?私に教えてください、それが動作する場合、私は答えとして投稿します。 –

答えて

0

最終的に私の問題は解決しました。それが正式な方法かどうかわかりませんが、私の場合は魅力的です。

私のEntityType設定では、余分なオブジェクトとして'data' => $page,をformbuilderに渡しています。この結果、viewDataは値で満たされ、それはpageloadでpre-selectid選択ボックスを取得するために必要なものでした。

ここでは、最終的なスニペット:

  ->add('templateId', EntityType::class, array(
      'label' => 'Template type', 
      'class' => TemplateMan::class, 
      'placeholder' => 'Kies een template', 
      'choice_label' => 'name', 
      'choice_value' => 'templateId', 
      'data' => $page, 
      'data_class' => null, 
      'multiple' => false, 
      'expanded' => false, 
      'required' => true, 
     )) 
1

choice_valueは、呼び出し可能です:

'choice_value' => function($page){ 
    return strval($page->getId()); 
} 

は、私はこのケースで働くかもしれないと思います。試してみてください。

+0

これは次のエラーを出します:おそらく 'choice_value'は文字列値を必要とするため、メンバ関数getId()を呼び出して整数 – MadHouse

+0

を呼び出します。私は自分のコードを編集しました。応答する前に[EntityType documentation](https://symfony.com/doc/current/reference/forms/types/entity.html)を必ず読んで、自分で問題を突き止めることができるかもしれません。私は助けようとしているだけです。 –

+0

ありがとうございました。病気はドキュメントを調べます。私はそれを何度も読んだ。しかし、あなたは私が逃したものを知りません;)!あなたの助けに感謝します。 – MadHouse

関連する問題