我在网址中隐藏变量时遇到了问题。我在Symfony书中读到了关于路由的章节,它说:"对于任何严肃的Web应用程序来说,美丽的URL是绝对必须的。这意味着留下像index.php这样丑陋的URL?article_id = 57赞成像/ read / intro-to-symfony这样的东西。"
我不明白如何将一些索引传递给页面而不显示它。
在树枝上我有:
<a href="{{ path('AcmeBundle_some_page', {'variable':someID}) }}">
的routing.yml:
AcmeBundle_some_page:
path: /some_page/{variable}
defaults: { _controller: AcmeBundle:Page:some_page}
控制器:
public function some_pageAction($variable, Request $request) {
...
return $this->render('AcmeBundle:Pages:some_page.html.twig');
结果网址为:
app_dev.php/some_page/29
我也试过改变路径并使用GET:
的routing.yml:
AcmeBundle_some_page:
path: /some_page
defaults: { _controller: AcmeBundle:Page:some_page}
控制器:
public function some_pageAction(Request $request) {
$variable = $_GET['variable'];
...
return $this->render('AcmeBundle:Pages:some_page.html.twig');
结果网址为:
app_dev.php/some_page?variable=29
这正是&#34;丑陋的网址&#34;从书中:/
我仍然无法获得:
app_dev.php/some_page/
有可能吗?
答案 0 :(得分:1)
在URL中显示id,如app_dev.php / some_page / 29,这不是一个好习惯。你应该使用slug - https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/sluggable.md
而不是idSlug会将你的标题(如果标题是我的好文章)转换成my-geat文章。那么你的网址将是app_dev.php / some_page / my-great-article。然后,您将把slug传递给控制器,而不是ID
<a href="{{ path('AcmeBundle_some_page', {'variable':slug}) }}">
看看并阅读如何将Entity中的某些属性转换为slug。例如:
<?php
namespace Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="articles")
* @ORM\Entity
*/
class Article
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(length=64)
*/
private $title;
/**
* @Gedmo\Slug(fields={"title", "code"})
* @ORM\Column(length=128, unique=true)
*/
private $slug;
}
在URL中显示slug并且不隐藏所有内容是很常见的。 Slug非常适合搜索引擎(SEO)。