删除方法Symfony

时间:2016-02-22 10:04:08

标签: php symfony

尝试创建删除方法后,我遇到以下错误:

{% extends 'base.html.twig' %}

{% block body %}
    {% if movies|length == 0 %}
        There are no movie items available. Add a movie <a href="{{ path('movie_create_form') }}">here</a> to get started.
    {% elseif movies|length != 0 %}
        These are the results: <br />
        <ul>
            {% for x in movies %}
                <li>Title: {{ x.title }}  - Price: {{ x.price }} - <a href="#">Edit</a> - <a href="{{ path('movie_delete') }}{{ x.id }}"> Delete</a></li>
            {% endfor %}
        </ul>
        <a href="{{ path('movie_create_form') }}">Add more movie entries</a>
    {% endif %}
{% endblock %}

我正在使用的代码: 树枝模板:

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;

use AppBundle\Entity\Movie;

class MovieDeleteController extends Controller
{

    public function deleteAction($id)
    {
        $em = $this->getDoctrine()->getManager();

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

        $movie = $this->getDoctrine()->getEntityManager()->getRepository('AppBundle:Movie')->Find($id);

        if($movie != null)
        {
            $em->remove($movie);
            $em->flush();
        }

        return $this->redirectToRoute('movies');
    }
}

删除课程:

movie_delete:
    path:     /movies/delete/{id}
    defaults: { _controller: AppBundle:MovieDelete:delete }

我的routing.yml:

{{1}}

任何人都可以解释一下我应该如何在Symfony中添加Delete方法,以便我可以在上面编写的代码中应用更改?

3 个答案:

答案 0 :(得分:4)

您没有将ID传递给path()函数。你应该做的是:

<a href="{{ path('movie_delete', {'id': x.id}) }}">Delete</a>

path()函数使用Symfony路由,如果您忘记指定必需的属性,则会抛出异常。

答案 1 :(得分:3)

在您的树枝代码中,更改以下行:

<a href="{{ path('movie_delete') }}{{ x.id }}"> Delete</a>

致:

<a href="{{ path('movie_delete', { id: x.id }) }}"> Delete</a>

像这样,将使用x.id作为id参数生成路线。

答案 2 :(得分:3)

您已忘记通过该ID&#39;可变到树枝路线。

<a href="{{ path('movie_delete') }}{{ x.id }}"> Delete</a>

应该是

<a href="{{ path('movie_delete', {id: x.id}) }}"> Delete</a>

在你的电影中删除&#39;路线,你已经定义了一个&#39; id&#39;参数。创建此路由时需要此参数。将丢失的参数传递到twig文件中,然后就完成了!

如果您要开始编辑&#39;编辑&#39;路线也一样,请记住,你需要一个&#39; id&#39;参数也是如此。确保将其传递到您的树枝文件中,就像使用&#39;删除&#39;路由。

请参阅:This Symfony documentation,此处解释了树枝路由的其他参数。在你的情况下&#39; slug&#39;被&#39; id&#39;取代。

祝你好运!