隐藏URL中的变量 - 书

时间:2014-10-13 12:22:56

标签: php symfony twig

我在网址中隐藏变量时遇到了问题。我在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/

有可能吗?

1 个答案:

答案 0 :(得分:1)

在URL中显示id,如app_dev.php / some_page / 29,这不是一个好习惯。你应该使用slug - https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/sluggable.md

而不是id

Slug会将你的标题(如果标题是我的好文章)转换成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)。