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