2013-06-05 36 views
0

我在试图学习如何使用Symfony 2.3框架。我认为这将是一个很好的第一个练习,修改Acme\DemoBundle\DemoController::helloaction()提供默认名称,当没有输入。设置Symfony控制器动作的默认值

这是原文:

/** 
* @Route("/hello/{name}", name="_demo_hello") 
* @Template() 
*/ 
public function helloAction($name) 
{ 
    return array('name' => $name); 
} 

它的工作原理与像localhost/Symfony/web/demo/hello/SOMENAME URL和失败,像localhost/Symfony/web/demo/hello/SOMENAME/localhost/Symfony/web/demo/hellolocalhost/Symfony/web/demo/hello/

这个网址是我做过什么:

/** 
* @Route("/hello", name="_demo_hello", defaults={"name" = "World"}) 
* @Template() 
*/ 
public function helloAction($name) 
{ 
    return array('name' => $name); 
} 

它与localhost/Symfony/web/demo/hello一起使用,并且以localhost/Symfony/web/demo/hello/SOMENAME,失败和localhost/Symfony/web/demo/hello/

如何使路由在有和没有名称的情况下工作,并且有和没有结尾斜杠?

回答

3

您可以设置一个默认值是这样的:

/** 
* @Route("/hello/", defaults={"name" = "John"}) 
* @Route("/hello/{name}", name="_demo_hello") 
* @Template() 
*/ 
public function helloAction($name) { ... } 

同样重要的是要知道你可以在相同的动作多个路由,所以不需要重复动作。

查看文档:http://symfony.com/doc/2.2/book/controller.html和:@Route Documentation

我认为,如果你的路线/hello后追加一个/您的解决方案还应该工作。

+0

确定修复了默认问题。 TX!也许我正在阅读手册的错误版本,但我明白,如果占位符在路由中,那么参数是必需的。 – dnagirl

+0

关于尾部斜线问题的任何想法? – dnagirl

+0

刚刚添加到我的答案。你的路由是'/ hello',所以,如果你想要'/ hello /'工作,你必须将'/'附加到你的路由 – bpoiss