Symfony2 - 创建URL

时间:2015-07-24 12:29:03

标签: php symfony

我刚刚开始使用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时,我得到一个空白页面。少了什么东西?我是否还需要在其他地方进行更改?

2 个答案:

答案 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},并在控制器操作中将其作为参数接收。

Symfony book: Routing