Tp5.0完全开发手册学习(第四章 路由)

一、作用:

    简化URL地址,方便记忆;有利于搜索引擎优化

二、模式:

ThinkPHP5.0的路由比较灵活,并且不需要强制定义,可以总结归纳为如下三种方式:

 普通模式、强制模式、混合模式

三、路由注册规则

   路由注册可以采用方法动态单个和批量注册,也可以直接定义路由定义文件的方式进行集中注册。

1、动态注册

    Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');

    ①路由表达式:

        '/' => 'index', // 首页访问路由
        'my'        =>  'Member/myinfo', // 静态地址路由
        'blog/:id'  =>  'Blog/read', // 静态地址和动态地址结合
        'new/:year/:month/:day'=>'News/read', // 静态地址和动态地址结合
        ':user/:blog_id'=>'Blog/read',// 全动态地址
        'blog/:year/[:month]'=>'Blog/archive',//可选择地址表达式
        'new/:cate$'=> 'News/category',//完全匹配表达式

     ②路由地址:

        方式1:路由到模块/控制 // '[模块/控制器/操作]?额外参数1=值1&额外参数2=值2...'
        方式2:路由到重定向地址 // '外部地址'(默认301重定向) 或者 ['外部地址','重定向代码']
        方式3:路由到控制器的方法 // '@[模块/控制器/]操作'
        方式4:路由到类的方法 // '\完整的命名空间类::静态方法' 或者 '\完整的命名空间类@动态方法'
        方式5:路由到闭包函数 // 闭包函数定义(支持参数传入)

    ③请求类型:

        GET GET请求
        POST POST请求
        PUT PUT请求
        DELETE DELETE请求

    ④路由参数[数组]

        

method 请求类型检测,支持多个请求类型
ext URL后缀检测,支持匹配多个后缀
deny_ext URL禁止后缀检测,支持匹配多个后缀
https 检测是否https请求
domain 域名检测
before_behavior 前置行为(检测)
after_behavior 后置行为(执行)
callback 自定义检测方法
merge_extra_vars 合并额外参数
bind_model 绑定模型(V5.0.1+
cache 请求缓存(V5.0.1+
param_depr 路由参数分隔符(V5.0.2+
ajax Ajax检测(V5.0.2+
pjax Pjax检测(V5.0.2+

        ⑤变量规则(数组

ThinkPHP5.0支持在规则路由中为变量用正则的方式指定变量规则,弥补了动态变量无法限制具体的类型问题,并且支持全局规则设置。

2、批量注册

    ①方法注册

Route::rule([
'路由规则1'=>'路由地址和参数',
'路由规则2'=>['路由地址和参数','匹配参数(数组)','变量规则(数组)']
...
],'','请求类型','匹配参数(数组)','变量规则');

    ②路由配置定义

除了支持动态注册,也可以直接在应用目录下面的route.php 的最后通过返回数组的方式直接定义路由规则,内容示例如下:

return [
    'new/:id'   => 'News/read',
    'blog/:id'   => ['Blog/update',['method' => 'post|put'], ['id' => '\d+']],
];

3、资源路由

5.0支持设置RESTFul请求的资源路由,方式如下:

Route::resource('blog','index/blog');

或者在路由配置文件中使用__rest__添加资源路由定义:

return [
    // 定义资源路由
    '__rest__'=>[
        // 指向index模块的blog控制器
        'blog'=>'index/blog',
    ],
    // 定义普通路由
    'hello/:id'=>'index/hello',
]

设置后会自动注册7个路由规则,如下:

标识 请求类型 生成路由规则 对应操作方法(默认)
index GET blog index
create GET blog/create create
save POST blog save
read GET blog/:id read
edit GET blog/:id/edit edit
update PUT blog/:id update
delete DELETE blog/:id delete

具体指向的控制器由路由地址决定,例如上面的设置,会对应index模块的blog控制器,你只需要为Blog控制器创建以上对应的操作方法就可以支持下面的URL访问:

http://serverName/blog/
http://serverName/blog/128
http://serverName/blog/28/edit

4、快捷路由

快捷路由允许你快速给控制器注册路由,并且针对不同的请求类型可以设置方法前缀,例如

// 给User控制器设置快捷路由
Route::controller('user','index/User');

5、路由别名

路由别名功能可以使用一条规则,批量定义一系列的路由规则。

// user 别名路由到 index/User 控制器
Route::alias('user','index/User');

6、URL生成

ThinkPHP5.0支持路由URL地址的统一生成,并且支持所有的路由方式,以及完美解决了路由地址的反转解析,无需再为路由定义和变化而改变URL生成。

Url::build('地址表达式',['参数'],['URL后缀'],['域名'])

url('地址表达式',['参数'],['URL后缀'],['域名'])


猜你喜欢

转载自blog.csdn.net/lugr_shx/article/details/80168337
今日推荐