Php 在URL中隐藏变量-本书

Php 在URL中隐藏变量-本书,php,symfony,twig,Php,Symfony,Twig,我在URL中隐藏变量时遇到问题。我读了Symfony书中关于路由的一章,它说:“漂亮的URL对于任何严肃的web应用程序来说都是绝对必须的。这意味着留下像index.php?article_id=57这样难看的URL,支持像/read/intro to Symfony这样的东西。” 我不明白我怎么能在不显示的情况下将一些索引传递给页面 在细枝上我有: <a href="{{ path('AcmeBundle_some_page', {'variable':someID}) }}">

我在URL中隐藏变量时遇到问题。我读了Symfony书中关于路由的一章,它说:“漂亮的URL对于任何严肃的web应用程序来说都是绝对必须的。这意味着留下像index.php?article_id=57这样难看的URL,支持像/read/intro to Symfony这样的东西。”

我不明白我怎么能在不显示的情况下将一些索引传递给页面

在细枝上我有:

<a href="{{ path('AcmeBundle_some_page', {'variable':someID}) }}">
控制器:

public function some_pageAction($variable, Request $request) {  
...
return $this->render('AcmeBundle:Pages:some_page.html.twig');
public function some_pageAction(Request $request) { 
$variable = $_GET['variable'];
...
return $this->render('AcmeBundle:Pages:some_page.html.twig');       
结果URL为:

app_dev.php/some_page/29
app_dev.php/some_page?variable=29
我还尝试更改路径并使用GET:

routing.yml:

AcmeBundle_some_page:
    path:  /some_page/{variable}
    defaults: { _controller: AcmeBundle:Page:some_page}
AcmeBundle_some_page:
     path:  /some_page
     defaults: { _controller: AcmeBundle:Page:some_page}    
控制器:

public function some_pageAction($variable, Request $request) {  
...
return $this->render('AcmeBundle:Pages:some_page.html.twig');
public function some_pageAction(Request $request) { 
$variable = $_GET['variable'];
...
return $this->render('AcmeBundle:Pages:some_page.html.twig');       
结果URL为:

app_dev.php/some_page/29
app_dev.php/some_page?variable=29
这正是书中的“丑陋URL”:/

我仍然无法得到:

app_dev.php/some_page/

有可能吗?

在像app_dev.php/some_page/29这样的URL中显示id是不好的做法。您应该使用slug-

Slug会将您的标题(如果标题是我的伟大文章)转换为我的geat文章。那么您的URL将是app_dev.php/some_page/my-great-article。然后将slug传递到控制器,而不是ID

<a href="{{ path('AcmeBundle_some_page', {'variable':slug}) }}">

看看并阅读如何将实体中的某些属性转换为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,并且希望它正常工作,为参数指定有效的默认值,然后将其存储在会话中“someID”正在更改,因此我不能只设置一个值。它甚至可能是页面上的几个链接。我不知道是否可以将链接值写入会话。您不必:只需将会话值设置为1(第一页),并在用户单击下一步时将其更新为2,或在单击上一步时将其值减小一点即可。“someID”可能有来自数据库的各种值(1,2,但也有234,542343)所以递增和递减都不起作用。我必须使用一些通用的机制,如雷普兰所提到的。这对我来说似乎很复杂,但我会努力的。谢谢回复。谢谢你的回答。我会调查的,可能需要一些时间:)