我刚刚开始使用Symfony。当我打电话给像book / 5这样的网址时,我想回复$ 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');
}
}
file:/Myproject/app/Resources/views/default/index2.html.php
<?php
echo $id;
?>
当我拨打书/ 6时,我得到一个空白页面。少了什么东西?我是否还需要在其他地方进行更改?
答案 0 :(得分:4)
您应该在操作中声明该变量并将其传递给您的视图。
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会映射它。然后,如果你想在你的视图中使用它,你必须传递它。
答案 1 :(得分:2)
如果您刚开始使用Symfony,我强烈建议您阅读Symfony Book and Cookbook。它们充满了例子,相对容易理解,即使对于新手也是如此。
除此之外,smottt的答案是正确的。您可以在路径定义中添加{id},并在控制器操作中将其作为参数接收。