欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

thinkphp5路由心得

程序员文章站 2022-06-25 15:53:38
路由的作用:1. 简化URL地址,方便大家记忆2. 有利于搜索引擎的优化,比如可以被百度的爬虫抓取到 优化URl1. 前后端分离修改入口文件,在public下新建admin.php文件,将下面的代码添加进入 2.绑定模块1)前后端分离实现的功能index.php 这个入口文件只能进入前台模块admi ......

路由的作用:
1. 简化url地址,方便大家记忆
2. 有利于搜索引擎的优化,比如可以被百度的爬虫抓取到

优化url
1. 前后端分离
修改入口文件,在public下新建admin.php文件,将下面的代码添加进入

1 // 定义应用目录
2  
3 define('app_path', __dir__ . '/../application/');
4  
5 // 加载框架引导文件
6  
7 require __dir__ . '/../thinkphp/start.php';

2.绑定模块
1)前后端分离实现的功能
index.php 这个入口文件只能进入前台模块
admin.php 这个入口文件只能进入后台模块
2)绑定模块
在index.php添加 define(‘bind_module’,’index’); 这样http://www.demo.com/index.php/只能访问前台模块。访问不了后台,http://www.yd.com/index.php/index/index
在admin.php添加 define(‘bind_module’,’admin’); 这样http://www.demo.com/admin.php只能访问后台模块,访问不了前台,http://www.yd.com/admin.php/index/index
3) 隐藏入口文件(怎么操作就不写了,可以看下文档里面的url访问下 隐藏入口文件 的说明),这样访问前台模块可以省去index.php,可以用http://www.yd.com/index/index直接访问到


关闭后台的路由
在public下的admin.php中添加这句代码 \think\app::route(false);

// 定义应用目录
 
define('app_path', __dir__ . '/../application/');
 
//绑定后台
 
define('bind_module','admin');
 
// 加载框架引导文件
 
require __dir__ . '/../thinkphp/start.php';
 
 
 
//关闭admin模块的路由,必须写到加载框架引导文件之后
 
\think\app::route(false);

 


路由的三种模式:
1. 普通模式 :完全使用pash_info来访问,比如http://www.yd.com/index.php/index/index,域名+模块+控制器
2. 混合模式 :可以使用路由也可以不使用
3. 强制模式 :必须使用路由


设置路由

一.动态单个设置

在application下的route.php文件内更改

1 use think\route; //引入route
2  
3 route::rule('test','index/index/demo'); //当url访问http://www.yd.com/test时,访问的是index模块下的index下的控制器下的demo方法

路由形式:
静态路由:route::rule(‘test’,’index/index/demo’);
带参数的路由: route::rule(‘getid/:id’,’index/user/getid’);
比如我访问http://www.yd.com/getid/7,或者http://www.yd.com/getid/8,或者http://www.yd.com/getid/9,就是getid后面带个参数

 1 //首先在index模块下的user控制器中写一个getid方法
 2  
 3 public function getid(){
 4  
 5 echo input('id'); //输出id
 6  
 7 }
 8  
 9 //然后在route.php加上这行代码
10  
11 route::rule('getid/:id','index/user/getid');
12  
13 //最后当我们http://www.yd.com/getid后面加个数字,比如http://www.yd.com/getid/20,页面会显示20

带多个参数路由,比如带两个参数

 1 //index模块下的user控制器中写一个mytime方法
 2  
 3 public function mytime(){
 4  
 5 echo input('year').' 年 '.input('month').'月'; //输出 n年n月
 6  
 7 }
 8  
 9 //然后在route.php加上这行代码
10  
11 route::rule('time/:year/:month','index/user/mytime');
12  
13 //最后当我们访问http://www.yd.com/time/2018/9,页面会显示2018 年 9月

选择性带参数,就是我们在访问url时,url后面可以带参数,也可以不带,在写路由文件上的参数带上中括号就行
比如输出年或年月

 1 public function mytime(){
 2  
 3 echo input('year').' 年 '.input('month').'月'; //输出 n年n月
 4  
 5 }
 6  
 7 //然后在route.php加上这行代码
 8  
 9 route::rule('time/:year/[:month]','index/user/mytime'); //重点:month外面加[]
10  
11 //最后当我们访问http://www.yd.com/time/2018/9,页面会显示2018 年 9月
12  
13 //当我们访问http://www.yd.com/time/2018,页面会显示2018 年 月

纯带参数的路由 不建议使用

 1 //路由写法
 2  
 3 route::rule(':x/:y','index/user/xandy');
 4  
 5 //方法
 6  
 7 public function xandy(){
 8  
 9 echo input('x').' '.input('y');
10  
11 }
12  
13 //访问http://www.yd.com/5/3,页面输出5 3

完全匹配路由 在路由的后面加个$符号

 1 public function comp(){
 2  
 3 echo '我是完全匹配路由';
 4  
 5 }
 6  
 7 //不加$符号,我们字comp后面加多少路径,比如http://www.yd.com/comp/asdfda/asdfasfd/aaa/bbb,页面都能输出 我是完全匹配路由
 8  
 9 route::rule('comp','index/user/comp');
10  
11  
12  
13 //加上$符号,我们在comp后面加多少路径,比如http://www.yd.com/comp/asdfda/asdfasfd/aaa/bbb,页面不能输出方法的内容
14  
15 route::rule('comp','index/user/comp');

二.批量设置路由
第一种写法,将上面所有单个动态注册的路由批量注册

 1 route::rule([
 2  
 3 "test"=>"index/index/demo",
 4  
 5 'getid/:id'=>'index/user/getid',
 6  
 7 'time/:year/[:month]'=>'index/user/mytime',
 8  
 9 ':x/:y'=>'index/user/xandy',
10  
11 'comp$'=>'index/user/comp'
12  
13 ],'','get');

第二种方式,这里用get举例

 1 route::get([
 2  
 3 "test"=>"index/index/demo",
 4  
 5 'getid/:id'=>'index/user/getid',
 6  
 7 'time/:year/[:month]'=>'index/user/mytime',
 8  
 9 ':x/:y'=>'index/user/xandy',
10  
11 'comp$'=>'index/user/comp'
12  
13 ]);

3.配置文件设置路由,使用配置文件批量注册,还是在route.php文件内写

 1 return[
 2  
 3 "test"=>"index/index/demo",
 4  
 5 'getid/:id'=>'index/user/getid',
 6  
 7 'time/:year/[:month]'=>'index/user/mytime',
 8  
 9 ':x/:y'=>'index/user/xandy',
10  
11 'comp$'=>'index/user/comp'
12  
13 ];

路由的请求方式
tp里面有四种请求方式,get,post,put,delete四种方式,如果我们不指定请求类型,默认是*,所有的请求类型

请求方式有两种写法,这里用get举例

1 route::rule('qtype','index/user/questtype','get');
2  
3 route::get('gtype','index/user/questtype');

既支持get有支持post的写法

route::rule('type','index/user/questtype','get|post');

全部请求方式都支持的两种写法

route::any('type','index/user/questtype');
 
route::rule('type','index/user/questtype','*');

变量规则,route::rule();的最后一个参数,是一个数组,可以指定多个参数,用正则表达式来写,用来规范传入的参数必须是什么数据类型,或者必须是那些数据等等,比如

route::rule('getid/:id','index/user/getid','get',[],['id'=>'\d']);  //最后一个参数,表示id传参数必须是数字

路由参数,route::rule();的倒数第二个参数,是一个数组,可以用来指定请求的数据类型,也可以用来规定请求的url后缀,比如

route::rule('getid/:id','index/user/getid','get',['method'=>'get','ext'=>'html'],['id'=>'\d']);
 
//请求方式必须是get,请求的后缀必须是html,访问的url为http://www.yd.com/getid/9.html,不带html后缀就请求失败

资源路由,你的后台模块可能会有增删改查等操作,但是一个一个写太费劲,资源路由自动帮你生这些路由,你只需要在控制器内写这些方法,

thinkphp5路由心得

比如

 1 //先创建block
 2  
 3 namespace app\index\controller;
 4  
 5 class block
 6  
 7 {
 8  
 9 public function index(){
10  
11 echo '我是前台模块下的block';
12  
13 }
14  
15 public function create(){
16  
17 echo '我是前台模块下的block的create方法';
18  
19 }
20  
21 public function read($id){
22  
23 echo $id;
24  
25 }
26  
27 }
28  
29 //然后在route.php下写上资源路由
30  
31 route::resource('block','index/block');
32  
33  
34  
35 //效果:
36  
37 //当你访问http://www.yd.com/block url访问的是index方法
38  
39 //当你访问http://www.yd.com/block/15 url访问的是read方法
40  
41 //当你访问http://www.yd.com/block/create url访问的是create方法

快捷路由
在index模块下创建一个fastroute控制器,里面写下如下例子,除了index,其他方法都要加上get

 1 namespace app\index\controller;
 2  
 3 class fastroute
 4  
 5 {
 6  
 7 public function index(){
 8  
 9 echo '我是fast路由的index';
10  
11 }
12  
13 public function getaa(){
14  
15 echo "我是getaa";
16  
17 }
18  
19 public function getbb(){
20  
21 echo "我是bb";
22  
23 }
24  
25 public function postinfo()
26  
27 {
28  
29 }
30  
31  
32  
33 public function putinfo()
34  
35 {
36  
37 }
38  
39  
40  
41 public function deleteinfo()
42  
43 {
44  
45 }
46  
47 }

在route.php里面写下快捷路由

1 //注意:路由名字要和控制器名字一样
2  
3 route::controller('fastroute','index/fastroute');
4  
5 //然后我们想访问getaa方法,我们可以通过访问url http://www.yd.com/fastroute/aa来访问
6  
7 //想访问getbb(),可以通过 http://www.yd.com/fastroute/bb来访问
8 1

生成url 两种方式,不太懂有什么用

1 url::build(‘index/user/index’);
2 url::build();
3 
4  
5 url::root('/index.php'); //带入口文件
6  
7 dump(url('index/user/index'));
8  
9 dump(url::build('index/user/index'));