在Symfony中按ID删除单个学说条目

时间:2017-08-07 13:31:51

标签: symfony doctrine

我正在尝试设置博客,我有一份所有博客条目的列表以及该博客的所有用户列表。博客管理员可以从这些列表中删除单个条目。 无论如何,我遇到的问题是,当选择一个要删除的条目时,它总是我列表中的第一个被删除的条目,而不是我实际选择的条目。

这是我的deleteAction:

  /**
    * @Route("/blog/delete/{id}", name="entrydelete", requirements={"id" = "\d+"}, defaults={"id" = 0})
    *
    */
    public function deleteAction(Request $request, Blog $blog) {
       $em = $this->getDoctrine()->getManager();
       $entry = $em->getRepository('BlogBundle:Blog')->find($blog);
      if ($this->get('security.authorization_checker')->isGranted('ROLE_ADMIN') || $entry->getAuthor() == $this->getUser()->getUsername() ) {
          $em->remove($entry);
          $em->flush();
          return $this->render('BlogBundle:blog:deletesubmit.html.twig');
        }
      else {
        return $this->render('BlogBundle:blog:error.html.twig');
      }
    }
    public function configureOptions(OptionsResolver $resolver) {
      $resolver->setDefaults([
        'data_class' => 'BlogBundle\Entity\Blog'
      ]);
    }

和相应的树枝模板:

{% for blog in bloglist %}
  <h4>{{ blog.title }}</h4>
    <p><span class="fa fa-clock-o"></span> Posted on {{ blog.date|date('d.M Y H:i A') }} </p>
    <p><span class="fa fa-user-circle"></span> Posted by {{ blog.author }} </p>
    <p>{{ blog.text }}</p>

      <button type="button" class="btn btn btn-info">
        <a href="{{ path('entryedit', {'id':blog.id}) }}" style="color: #FEFEFE">Edit entry</a>
      </button>
      <button type="button" class="btn btn btn-warning">
        <a href= "#myModal" role="button" data-toggle="modal" style="color: #FEFEFE">Delete entry</a>
      </button>

        <div id="myModal" class="modal fade" role="dialog">
          <div class="modal-dialog">
            <div class="modal-content">
              <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">×</button>
                <h3 class="modal-title" id="myModalLabel">Are you sure?</h3>
              </div>
                <div class="modal-body">
                  <p>Do you really want to delete this profile?</p>
                </div>
                <div class="modal-footer">
                  <button class="btn" data-dismiss="modal">
                    Go Back
                  </button>
                  <button type="button" class="btn btn btn-warning">
                    <a href="{{ path('entrydelete', {'id':blog.id}) }}" style="color: #FEFEFE">Yes</a>
                  </button>
              </div>
            </div>
          </div>
        </div>
    <hr>
  {% endfor %}

所以只是为了澄清一下:如果我有这样的列表: 1.进入1 2.第2条 3.进入3 并且我想删除条目3,选择那个并确认,条目1已经消失。

对任何形式的帮助都会感到高兴!!

3 个答案:

答案 0 :(得分:1)

尝试改变这个:

git remote rm origin

到此:

https://username:password@github.com/repo-name

因为你需要通过传入url的id找到你的实体,你不会传递一个Blog对象而是一个id

答案 1 :(得分:0)

您的HTML代码确实存在问题。您可以渲染与元素一样多的模态,因为模态渲染位于{% for %}循环内。

除了它没有真正优化以渲染这么多模态元素之外,它们都具有相同的myModal id。当您单击&#34;删除条目&#34;按钮,显示标识为myModal的模态,但其中有3个。您的浏览器显示第一个,这就是为什么它总是被删除的条目1。

在您的代码中还可以修复和优化其他内容,但要回答您的问题,这是一个简单的修复。

更改此行:

<a href= "#myModal" role="button" ...>Delete entry</a>

为:

<a href="#deleteEntryModal{{ blog.id }}" role="button" ...>Delete entry</a>

这一行:

<div id="myModal" ...>

<div id="deleteEntryModal{{ blog.id }}" ...>

这样,您就可以获得每个模态元素的唯一ID,这样可以使您的页面正常工作,并且HTML也有效。

正如我之前所说,也可以进行一些优化(比如只使用一个模态元素(在{% for %}循环之外),并更改URL以使用JavaScript删除元素。但这不是这条消息的范围。

答案 2 :(得分:0)

如果实体经理可以找到具有整数id的Blog对象,也可以找到Blog $id。点是$ blog应该是$ id,因为在路由中你定义了它:id

更改此部分:

/**
* @Route("/blog/delete/{id}", name="entrydelete", requirements={"id" = "\d+"}, defaults={"id" = 0})
*
*/ 
public function deleteAction(Request $request, Blog $blog)

/**
* @Route("/blog/delete/{id}", name="entrydelete", requirements={"id" = "\d+"})
*
*/
public function deleteAction(Request $request, Blog $id)