Symfony 从路由认识它

 经过上一篇文章之后,我们呢,可以访问这个默认的页面,你也会看到一堆高级的debug工具。好了,这次我们开始更多地了解这个symfony2.0。

      首先我们要明白一点,Symfony2 的配置是一个着实很让人捉急的事情,但是呢并不可怕,尤其是你非常熟练的使用了这种路由规则之后,你就会发现,他比 thinkPHP 的 ActionName/MethodName/data/{dataValue}/data2/{dataValue2},或者是CI这种路由想分页都会给你搞出一堆事情的 (主要是是CI的传入没有key只有value,并且取值的时候是按照位置来取的,也就是说稍微改变一下路由,那么你的p的位置就不对了,用过CI的同学应该被这个坑了一把,又说废话了)ControllerName/MethodName/{value1}/{value2}/{value3},更或者CakePHP那么种连大小写都要区分的路由(my poor English)。废话不多说,我们来看下app/config/里面有什么文件:

      大致解释一下,配置的规则,最基本的格式是yml。也可以用php annotation 。

      在dev模式下,默认访问*_dev文件。也就是说我们默认访问的是config_dev.yml 和routing_dev.yml。 paramters.yml是YAML的一种比较好的写法而已,暂时不用管。另外,在一个配置中是可以通过一定的语法应用另外一个配置,并且覆盖掉其中的一些变量,也就是配置可以继承(大概是那么个意思,不用深究)。

     打开routing_dev.yml:

      

     看到这么复杂的文件总会让初次认识他的你有那么点蛋碎

     我们记住配置的几种种写法(常用的).

     第一: 如_welcome  他非常明确地告诉Symfony2 , 只要满足 /welcome这个模式,那么就访问我的AcmeDemoBundle里面的Welcome控制器的index 方法。

     第二: 如 _demo 。如果说路由的前缀(prefix)是 /demo,那么你就去看一看DemoController.php里面的注释。

     第三: 如 _wdt 。如果说路由的前缀满足 /_wdt ,  那你请到@WebProfilerBundle/Resources/config/routing/wdt.xml里面去看一看具体匹配到哪个

     我一般是结合第一和第三中写法,因为用注释来写的话,我一会就找不到具体的路由在哪里了。

     然后_wdt, _profiler _configurator _main  就是你之前看到的那个高级的debug工具的路由。它会默默陪伴你到开发结束,并且提供给你很多帮助。

     来看一个比较实际的例子:

    

      我现在有很多的Bundle,他么分别负责不同的模块嘛,并且基本没有什么依赖,所以为啥我要把路由写在一起呢,所以,我在主路由,也就是app/config/routing.yml里面,分别表示的小路由 前缀,以及小路由的地址。这样一来Symfony会帮我们找到并且正确匹配的。

      然后我们可以通过 app/console 的路由debug工具来看一看我们到底有哪么些路由:

  

      另外:这里有一个小技巧分享一下,如果你使用的是Annotation 的注释,如果你的路由有问题,也就是写错了,他会这样提示你,Can't Load Controller XXX.php  千万不要以为你的Controller 它找不到,而是你的路由配置写错了!  相反,如果说使用yml来配置的话,它会提示得比较具体错误在哪里。

posted @ 2013-09-17 21:44  马宇申  阅读(502)  评论(0编辑  收藏  举报