“无法为指定路由生成URL

时间:2014-09-08 15:50:14

标签: php symfony

我刚开始玩symfony2,我正在努力添加网址等。 当使用@Route传递其名称时,我似乎无法获取我的twig模板来获取我的函数。 有什么想法吗?

控制器:

/**
* @Route("/cube/{number}", name="get_cubed")
*/
public function indexAction($number)
{
    $cube = $number * $number * $number;
    return $this->render('NumberCubedBundle:Default:index.html.twig',
        array('number' => $number, 'cube' => $cube)
    );
}

我的Twig文件:

{% extends '::base.html.twig' %}
{% block title %}Cube Number Generator{% endblock %}
{% block body %}
    {{ number }}^3 = {{ cube }}
    <a href="{{ path('get_cubed', { 'number': 40 }) }}">Cube 40</a>
{% endblock %}

错误:

An exception has been thrown during the rendering of a template ("Unable to generate a URL for the named route "get_cubed" as such route does not exist.") in NumberCubedBundle:Default:index.html.twig at line 5. 

任何帮助都会受到大力赞赏。 感谢

2 个答案:

答案 0 :(得分:5)

编辑:为什么注释不起作用

很可能您没有按照annotation routingsensio framwork EXTRA bundle中的说明添加Sensio的供应商包。

默认路由机制使用路由文件(routing.yml),该文件不需要额外包。

另一方面,通过注释进行路由被认为是一个并不总是需要的附加功能,因此已被提取到单独的可选包中。


您需要在路由文件中配置路由:

app/config/routing.yml

使用standard Symfony 2 routing syntax定义路线get_cubed

很像这样:

get_cubed:
    path:      /cube/{number}
    defaults:  { _controller: NumberCubedBundle:Default:index }
    requirements:
        number: \d+

现在您应该能够获得包含路线的页面:

.../app_dev.php/cube/40

答案 1 :(得分:4)

模式注释的解决方案是: 在app / config / routing.yml上添加:

tuto_produit_bundle:
    resource: "@ProduitBundle/Controller/"
    type: annotation
    prefix: /cat

和o URL:

http://localhost/produits/Symfony/web/app_dev.php/cat/{adresse}/{route action}
like http://localhost/vente%20produits/Symfony/web/app_dev.php/cat/categorie/