0

在某些Company(实体)页面上,我显示了Categories公司可能拥有的几个(实体)。对于显示的每个类别,我都需要添加带有评分值的简单表单。所以我创建了实体 CalledRating并生成了RatingType. 现在我遇到了为每个显示的类别显示此表单的问题,我只能在第一次category出现时显示表单一次,但是在Rating表单中它无法获取id它应该连接的类别的名称(the )。

Rating实体已定义CategoryCompany关联多对一 (@ORM)。

我将不胜感激如何处理。

我想诀窍在于控制器,所以下面是我的代码:

    /**
     * @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代码:

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'
        ));
    }
}
4

1 回答 1

0

每个 Symfony 表单只能在视图中呈现一次(至少没有讨厌的 hack)。

我提出另一种方法。在您的模板中渲染尽可能多的简单 html 表单(根本不与 Symfony 表单绑定!),您拥有尽可能多的类别。然后,为每个表单赋予另一个操作属性(例如“/catalog/{company_id}/category/{category_id}/vote”)。然后,创建新操作,您将在其中解析、验证和使用来自 Request 对象的数据。

如果你真的想使用 Symfony 表单来完成所有这些,你需要生成尽可能多的 Symfony 表单实例,尽可能多的类别。每个表单都需要有唯一的名称和操作(或一些隐藏字段)来区分用户想要投票的类别。

于 2017-06-21T20:41:53.697 回答