Php Symfony2-创建URL

Php Symfony2-创建URL,php,symfony,Php,Symfony,我刚开始使用Symfony。当我调用像book/5这样的URL时,我想回显$bookid,但我卡住了 这是我的DefaultController.php文件 namespace AppBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Compo

我刚开始使用Symfony。当我调用像book/5这样的URL时,我想回显$bookid,但我卡住了

这是我的DefaultController.php文件

namespace AppBundle\Controller;    
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class DefaultController extends Controller {
    /**
     * @Route("/book/{id}", name="book")
     */
    public function indexAction() {
        return $this->render('default/index2.html.php');
    }
}
文件:/Myproject/app/Resources/views/default/index2.html.php

<?php
echo $id;
?>


当我把这本书叫做/6时,我得到了一张空白页。少了什么?我还需要在其他地方更改吗?

您应该在操作中声明该变量,并将其传递给视图

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class DefaultController extends Controller
{
    /**
     * @Route("/book/{id}", name="book")
     */
    public function indexAction($id)
    {
        return $this->render('default/index2.html.php', array(
            'id' => $id
        ));
    }
}

每当在URL中定义参数时,还需要在动作函数中“声明”它,以便symfony映射它。然后,如果您想在视图中使用它,您必须传递它。

您应该在操作中声明该变量并将其传递给视图

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class DefaultController extends Controller
{
    /**
     * @Route("/book/{id}", name="book")
     */
    public function indexAction($id)
    {
        return $this->render('default/index2.html.php', array(
            'id' => $id
        ));
    }
}

每当在URL中定义参数时,还需要在动作函数中“声明”它,以便symfony映射它。然后,如果你想在你的视图中使用它,你必须传递它。

如果你刚刚开始使用Symfony,我强烈建议你阅读Symfony书籍和食谱。它们充满了例子,并且相对容易理解,即使对于新手也是如此

除此之外,斯莫特的答案是正确的。在路由定义中添加{id},并在控制器操作中将其作为参数接收


如果您刚刚开始使用Symfony,我强烈建议您阅读Symfony书籍和食谱。它们充满了例子,并且相对容易理解,即使对于新手也是如此

除此之外,斯莫特的答案是正确的。在路由定义中添加{id},并在控制器操作中将其作为参数接收


谢谢,但是如果我使用.php而不是.twig,我仍然看不到id的回显。我也需要在routing.yml文件中添加一些东西吗?你能稍微调试一下吗?只是为了确定一下?删除
echo$id来自模板,只需放入
echo“test”
以确保您呈现正确的模板?我在app/config/config.yml中做了一个更改,以便能够使用.php文件而不是twig,现在我得到一个错误:“模板“default/index2.html.php”不存在。我将
'default/index2.html.php'
更改为
::default/index2.html.php'
,它可以工作。不确定它是否正确使用。太好了!这是正确的语法,请查看更多信息。谢谢,但是如果我使用.php而不是.twig,我仍然看不到id的回显。我也需要在routing.yml文件中添加一些东西吗?你能稍微调试一下吗?只是为了确定一下?删除
echo$id来自模板,只需放入
echo“test”
以确保您呈现正确的模板?我在app/config/config.yml中做了一个更改,以便能够使用.php文件而不是twig,现在我得到一个错误:“模板“default/index2.html.php”不存在。我将
'default/index2.html.php'
更改为
::default/index2.html.php'
,它可以工作。不确定它是否正确使用。太好了!这是正确的语法,请查看更多信息。