Symfony-单击了哪个链接

Symfony-单击了哪个链接,symfony,Symfony,我正在Symfony为我所在大学的编程课程开发一个简单的租车应用程序 我不知道如何解决的问题是: 从数据库查询中,我得到了可用汽车的列表,并使用twig模板轻松地显示它们 我想要一个按钮旁边的每一个列出的汽车链接到/租赁网站,用户提供所有必要的信息 我知道我可以用这样的东西: <a href="{{ path('rent', {'id': car.id}) }}"> 但负责此路由的控制器是否有其他方法知道单击了哪个链接?毕竟,我需要知道哪个汽车用户想要租用,我不想以url/r

我正在Symfony为我所在大学的编程课程开发一个简单的租车应用程序

我不知道如何解决的问题是:

从数据库查询中,我得到了可用汽车的列表,并使用twig模板轻松地显示它们

我想要一个按钮旁边的每一个列出的汽车链接到/租赁网站,用户提供所有必要的信息

我知道我可以用这样的东西:

 <a href="{{ path('rent', {'id': car.id}) }}">


但负责此路由的控制器是否有其他方法知道单击了哪个链接?毕竟,我需要知道哪个汽车用户想要租用,我不想以url/rent/{id}结束。

如果您不想在url上显示car.id,请为每辆汽车创建一个随机的“令牌”,并将url设置为:



这将是
/rent/abcd5437fbadce88

如果您不想在URL上显示car.id,请为每辆车创建一个随机的“令牌”,并将URL设置为:



这将是
/rent/abcd5437fbadce88

我知道已经提供了一些其他解决方案,但我想给出一个稍微不同的建议和更多的解释。Pipe的反应是正确的,并且有效,但是出于您的目的,我不会只是为每辆车生成一个随机令牌,我会为每辆车绑定一个SEO友好的令牌

例如,在您的汽车表中,您将有:

+-------+--------------+
|  id   |    slug      |
+-------+--------------+
|   1   | ford-150     |
|   2   | cadillac-cts |
+-------+--------------+
然后,您的实体将具有相应的变量和条令注释,这些变量和注释类似于:

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

class Car
{
    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="slug", type="string", length=50, nullable=false)
     */
    private $slug;
}
现在,您在细枝中生成的链接如下所示:

<a href="{{ path('rent', {'slug': car.slug}) }}">
在此,Symfony将与您的
Car$Car
一起使用,以自动使用该
slug
属性,并找到与该slug匹配的相应
Car
实体

它本质上是以下操作的快捷方式,您也可以不使用param converter执行此操作:

/**
 * @Route("/rent/{slug}")
 */
public function rentAction($slug)
{
    $em = $this->getDoctrine()->getManager();
    $car = $em->getRepository('AppBundle:Car')->findOneBySlug($slug);

    // ...
}

这将允许您保留一个对用户有意义的友好URL,同时也会完全隐藏ID。

我知道已经提供了一些其他解决方案,但我想给出一个稍微不同的建议和更多的解释。Pipe的反应是正确的,并且有效,但是出于您的目的,我不会只是为每辆车生成一个随机令牌,我会为每辆车绑定一个SEO友好的令牌

例如,在您的汽车表中,您将有:

+-------+--------------+
|  id   |    slug      |
+-------+--------------+
|   1   | ford-150     |
|   2   | cadillac-cts |
+-------+--------------+
然后,您的实体将具有相应的变量和条令注释,这些变量和注释类似于:

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

class Car
{
    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="slug", type="string", length=50, nullable=false)
     */
    private $slug;
}
现在,您在细枝中生成的链接如下所示:

<a href="{{ path('rent', {'slug': car.slug}) }}">
在此,Symfony将与您的
Car$Car
一起使用,以自动使用该
slug
属性,并找到与该slug匹配的相应
Car
实体

它本质上是以下操作的快捷方式,您也可以不使用param converter执行此操作:

/**
 * @Route("/rent/{slug}")
 */
public function rentAction($slug)
{
    $em = $this->getDoctrine()->getManager();
    $car = $em->getRepository('AppBundle:Car')->findOneBySlug($slug);

    // ...
}

这将允许您保留一个对用户有意义的友好URL,同时完全隐藏ID。

谢谢,完美解决方案。谢谢,完美解决方案。