如何在symfony中为实体列表制作修改表单

时间:2016-05-24 07:31:00

标签: symfony

我使用symfony2框架,我有一个模板,显示实体列表(例如我的产品)我想创建一个单独的表单来删除,激活/停用以及列表中的其他一些操作,实际上我已经完成了它之前,但在那个场合我创建了一些动作(例如toggleActiveAction(Product $ product))而没有使用表单,只是通过创建一个链接,但我认为在这种方法中我有跨站点请求伪造攻击的危险,有人建议为每个实体创建一个表单,但我认为这不是一个好方法,我该如何处理?

2 个答案:

答案 0 :(得分:0)

使用与显示列表相同的结构。 要在视图中显示活动产品,您可以使用:

{% if product.active %} {{ product.attribute }} //It will put the products attribute in the browser if it is active {%endif%}

此处twig检查product.active ==(=)是否为true。 您可以在for循环中使用它来遍历产品。

{% for product in products %}
//The if block could go here.
{% enfor %}

答案 1 :(得分:0)

/**
 * 
 * @Route("/news/update/{id}", name="news_update")
 */
public function updateAction(Request $request, $id) {
        //Here I call my service
        $newsService = $this->get('app.news_service');

        //Here I receive the Entity I want to edit
        $toUpdate = $newsService->fetchById($id);

        //Here I create the form that I have defined in AppBundle\Forms
        $form = $this->createForm(new NewsForm(), $toUpdate);


        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {

            //Once the form is submitted my newsService updates the Entity in the database.
            $newsService->update($toUpdate);

            //I redirect overview
            return $this->redirectToRoute('news_show', array(), 301);
        }

        return $this->render('default/news/updateNews.html.twig', array(
                    'base_dir' => realpath($this->container->getParameter('kernel.root_dir') . '/..'),
                    'form' => $form->createView(),
        ));
    }

这将首先将您带到用户提交以保存更改的表单。