2017-06-21 5 views
0

Company(エンティティ)ページには、会社が持つ可能性があるいくつかのCategories(エンティティ)が表示されています。表示されるすべてのカテゴリについて、私は評価値を持つ簡単なフォームを追加する必要があります。だから私はRatingと呼ばれるエンティティを作成しました。私はRatingTypeを生成しました。 今、私は表示された各カテゴリのこのフォームを表示する際に問題があります。最初のcategoryオカレンスに対してフォームを1回だけ表示できますが、Ratingフォームにはフォームの名前(id)接続する必要があります。1つのページに表示されるいくつかのカテゴリの評価フォームsymfony

Ratingエンティティは、ManyToOne(@ORM)に関してCategoryCompanyを定義しています。

私はそれをどのように扱うことができるのかを助けていただきありがとうございます。

私はトリックが私のコードであるので、以下、コントローラに座っているとします

class RatingType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('comment') 
       ->add('vote') 
       // ->add('userName') 
       // ->add('ip') 
       // ->add('createdAt') 
       ->add('service') 
       // ->add('company') 
       ; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Rating' 
     )); 
    } 
} 
+0

あなたのフォームタイプを表示してください –

+0

私は 'RatingType'クラスを追加しました。これで十分だと思います。 – AppleandPear

答えて

0

各symfonyのフォームは一度だけビューでレンダリングすることができます:ここでは

/** 
    * @Route("/catalog/{id}.html", name="card_show") 
    */ 
    public function cardShowAction(Company $company, Request $request) 
    { 
     $form = null; 

     // @TODO: add verification if user is logged on => if ($user = $this->getUser()) 
     $rating = new Rating(); 
     $rating->setCompany($company); 

     $form = $this->createForm(RatingType::class, $rating); 
     $form->handleRequest($request); 

     if ($form->isValid() && $form->isSubmitted()) { 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($rating); 
      $em->flush(); 
      $this->addFlash('success', "Your vote has been saved!"); 

      return $this->redirectToRoute('card_show', array('id' => $company->getId())); 
     } 


     return $this->render("default/catalog/show.html.twig", array(
      'card' => $company, 
      'form' => is_null($form) ? $form : $form->createView() 
     )); 
    } 

RatingTypeコードです(少なくとも厄介なハッキングなしで)。

私は別のアプローチを提案します。あなたのテンプレートでは、多くのシンプルなHTMLフォームをレンダリングします(Symfony Formsにはまったくバインドされていません!)。次に、それらのそれぞれに別のアクション属性( "/ catalog/{company_id}/category/{category_id}/vote")を指定します。次に、新しいアクションを作成します。ここで、Requestオブジェクトのデータを解析し、検証し、使用します。

Symfonyフォームを使用してこれをすべて実行したい場合は、多くのカテゴリと同じ数のSymfonyフォームインスタンスを生成する必要があります。それぞれのフォームは、ユーザーが投票したい個別のカテゴリのユーザーに一意の名前とアクション(または隠れたフィールド)を持つ必要があります。

関連する問題