路由

路由概念

按照我的理解来说,路由就是让传输进行的url和具体编写的代码的某个方法之间进行正确的匹配,

symfony官网的解释来说,传入request,得到url,进行routing匹配,传给从controller,执行具体的方法,进行相应的响应.

定义路由

两种方法,

1.annation,使用注释对路由进行定义, 适合比较规范化的类,比如用户control 等类,这样访问的时候就可以通过user/method进行

2.router.ytml  使用于没有那么标准的,类似于一本字典,将每一个方法都罗列下来

注意:不能同时使用

url

一个是静态url,一个是动态url,这里先进行一个简单的解释

例,这里要传输页码,这里的requirements是对路由进行限制,不然同一个url可以成功匹配不同的路由

 1 class DefaultController extends Controller
 2 {
 3     /**
 4      * @Route("/page/{page_num}",defaults={"page_num":1},requirements={"page_num"="\d+"})
 5      * @Method("POST")     
     * @Template()
6 */ 7 public function indexAction($page_num) 8 { 9 return array('name' => $page_num); 10 } 11 }

这里传入page_num参数,defaults设置默认值,requirements对类型进行限制,动态的url

而如果要是静态的,return 一个固定的数字就是静态url,

注意:symfony默认去掉最后的/   即传入默认值时只需要page即可,不需要page/

1.网页一般要提交信息时,在annoation里面进行@Method("方法") 设置相应的方法,post/get,

ps:需要在前面添加use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

2.对于比较复杂的网站,可以在前面添加

/**
 * @Route("/page")
 */
//进行简化,之后的路由定义都是在/page目录下面进行定义的

 

3.ParamConverter 方法,将传入的参数转化为一个类,这样子就可以直接通过这个类的方法来获取各种信息

use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
class DefaultController extends Controller
{
    /**
     * @Route("/index/{page_num}",defaults={"page_num":1},requirements={"page_num"="\d+"})
     * @ParamConverter("post",class="ScourgenWebBundle:Post")
     * @Template()
     */
    public function indexAction(Post $post)
    {
        $title =$post->getTitle();
        return array('name' => $title);
    }
}

//类似这样进行使用即可,

除此之外,路由还可以在routing.yml当中进行定义,这种方式更为规范,之后也更好进行查找更换操作

blog_list:                 //路由名称
    path:      /blog/{page}    //路由路径
    defaults:  { _controller: AppBundle:Blog:list, page: 1 } //跳转到哪个Controller,并且可以设置参数默认值
    requirements:          //对于url和路由进行匹配的的限制,即参数的属性限制
        page: '\d+'

 

 _controller:参数格式  Bundle名:控制器类名:具体的方法名

 

posted @ 2019-03-02 15:57  _Ennio  阅读(197)  评论(0编辑  收藏  举报