在某个Company
(实体)页面上,我显示了公司可能拥有的多个Categories
(实体)。对于显示的每个类别,我需要添加具有评级值的简单表单。因此,我创建了名为Rating
的实体,并且我已生成RatingType
。
现在我有问题显示每个显示的类别此表单,我只能在第一次category
出现时显示表单,但是在Rating
表单中它不能显示名称(id
)应该连接的类别。
Rating
实体已定义与ManyToOne(@ORM)相关的Category
和Company
。
我很感激你的帮助,我该怎样处理。
我认为这个技巧位于Controller中,所以下面是我的代码:
/**
* @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'
));
}
}
答案 0 :(得分:0)
每个Symfony表单只能在视图中呈现一次(至少没有讨厌的黑客攻击)。
我提出另一种方法。在你的模板中呈现尽可能多的简单html表单(根本没有与Symfony Forms绑定!),你有很多类别。然后,给每个形成另一个动作属性(例如" / catalog / {company_id} / category / {category_id} / vote")。然后,创建新操作,您将在其中解析,验证和使用Request对象中的数据。
如果您真的想使用Symfony表单完成所有这些操作,则需要生成尽可能多的Symfony Forms实例,以及您将拥有的多个类别。每个表单都需要具有唯一的名称和操作(或一些隐藏字段),以便用户投票。