2017-02-20 13 views
0

私は3つのエンティティ持っている:記事、著者、Reivews:Symfonyでは:どのようにして、関連するエンティティに外部キーフィールドを含めずにフォームを埋め込むことができますか?

関係:

  • 記事はひとつ著者を持っています。
  • 記事には多くのレビューがあります。
  • 著者には多くの記事があります。
  • レビューには1人の著者がいます。
  • レビューには1つの記事があります。

著者は記事とレビューの両方を作成します。彼らはアプリのユーザーです。

私は、記事のSHOWビューに著者、記事、レビューエンティティの組み合わせを埋め込もうとしています。しかし、ユーザー(作成者)が提供する入力のみ。

使用例:ユーザー(著者)が記事のSHOWビューにあります。彼は、レビューを残すように求め、フォームフィールドが含まれている:

  • 評価(レビューエンティティ)
  • レビュータイトル(レビューエンティティ)
  • 名(著エンティティ)
  • メール(著エンティティ)

表示されている記事は表示しないでください。私たちはある時点でその背後でそれをつかみ、新しいReviewのarticle_idにコードを埋め込むことができます。

私はしばらくこの作業を続けてきました。フォームやイベントで何かをしなければならないと思いますか?ここで私はどこにいるのですか(これは遠くない...)

この試みでは、フィールドをオートポピュレートしてから隠しフィールドを使用することを検討していました....私はあまりそれをしません。あなたが提供することができ、任意の入力のために、事前にのarticle_idに

class ReviewType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     $builder->add('review')->add('title'); 

     //$builder->add('article', HiddenType::class); 

     $builder->add('author', AuthorType::class, array("label" => FALSE)); 

     $builder->add('rating', ChoiceType::class, array(
      'choices' => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' =>'5'), 
      'expanded' => true, 
      'multiple' => false 
     )); 

     $builder->addEventListener(
      FormEvents::PRE_SET_DATA, 
      function (\Symfony\Component\Form\FormEvent $event) { 
       $form = $event->getForm(); 
       $data = $event->getData(); 

       $article = $data->getArticle(); 
       $articleId = null === $article ? array() : $article->getId(); 
       $form->add('article', ArticleType::class, array("label" => FALSE)); 

      } 
     ); 

    } 

感謝を操作できるように、私は人々にチャンスを与えることが好きではありません!

答えて

0

article/{id}/showで生成されて表示されたフォームのアクションをarticle/{id}/reviewのように変更し、フォーム提出と永続性を管理する対応するアクションで記事IDを取得する必要があります。 これはフォームイベントの問題ではないと思います。

+0

ありがとうございます!いい考えだ。あなたが気にしないなら、私がまだ混乱しているいくつかのことを明確にしましょう:私たちはまだArticleType-> buildForm正しい形式でフォームを構築しますか?私が著者とレビューフォームの要素を追加すると、私の標準的な記事の追加/編集フォームが乱れることはありませんか?私はどのようにこれを処理するか分からない。再度、感謝します! – user2305673

+0

はい、いつものようにフォームを構築できます。あなたは 'ReviewType'と' addEventListener'から 'author'フィールドを削除するべきです。次に、レビューの永続性を管理するコントローラで、著者IDと記事IDを設定できます。なぜ-1? – ste

+0

それは完璧です、助けてくれてありがとう。私はなぜ/誰がdownvoteを与えたのか分からない。彼らは理由を挙げていませんでしたが、あなたのソリューションは私にとって完璧に機能します。 – user2305673

関連する問題