67

我的第一个 symfony2 项目是存储在数据库中的来宾列表(受邀参加活动)。我有

  • 用所有变量(id、姓名、地址、电话号码等)创建了实体类Guest
  • 在 mysql 数据库中创建了模式
  • 为树枝模板“添加客人”创建了一条路线
  • 创建了一个表单类型

最后是控制器中的“createGuest”方法,一切正常。

我无法从数据库中删除来宾。我已经阅读了网络上的所有教程,包括官方的 Symfony2 书;它所说的只是:

删除对象

删除对象非常相似,但需要调用实体管理器的 remove() 方法:

$em->remove($product);
$em->flush();

它并没有说明如何将控制器 deleteAction($id) 与 twig 模板连接起来(甚至“更新对象”部分也缺少文档)。我想要做的是使用 viewGuests 操作和 viewGuests 树枝模板列出所有来宾,每行旁边都有一个删除图标,您应该单击它来删除一个条目。很简单,但我找不到任何文档,也不知道从哪里开始。

public function deleteGuestAction($id)
    {
        $em = $this->getDoctrine()->getEntityManager();
        $guest = $em->getRepository('GuestBundle:Guest')->find($id);

        if (!$guest) {
            throw $this->createNotFoundException('No guest found for id '.$id);
        }

        $em->remove($guest);
        $em->flush();

        return $this->redirect($this->generateUrl('GuestBundle:Page:viewGuests.html.twig'));
    }
4

3 回答 3

93

Symfony 很聪明,并且知道如何自己制作find()

public function deleteGuestAction(Guest $guest)
{
    if (!$guest) {
        throw $this->createNotFoundException('No guest found');
    }

    $em = $this->getDoctrine()->getEntityManager();
    $em->remove($guest);
    $em->flush();

    return $this->redirect($this->generateUrl('GuestBundle:Page:viewGuests.html.twig'));
}

要在控制器中发送 id,请使用{{ path('your_route', {'id': guest.id}) }}

于 2012-08-04T16:01:35.643 回答
7

从...中删除,其中 id=...;

protected function templateRemove($id){
    $em = $this->getDoctrine()->getManager();
    $entity = $em->getRepository('XXXBundle:Templates')->findOneBy(array('id' => $id));

    if ($entity != null){
        $em->remove($entity);
        $em->flush();
    }
}
于 2015-05-15T08:27:50.437 回答
3

据我了解,您很难在模板中添加什么。

我将展示一个示例:

<ul>
    {% for guest in guests %}
    <li>{{ guest.name }} <a href="{{ path('your_delete_route_name',{'id': guest.id}) }}">[[DELETE]]</a></li>
    {% endfor %}
</ul>

现在发生的情况是它遍历来宾中的每个对象(如果您的对象集合以其他方式命名,则必须重命名它!),显示名称并放置正确的链接。路线名称可能不同。

于 2012-08-04T17:50:48.337 回答