thinkphp5路由心得
路由的作用:
1. 简化URL地址,方便大家记忆
2. 有利于搜索引擎的优化,比如可以被百度的爬虫抓取到
优化URl
1. 前后端分离
修改入口文件,在public下新建admin.php文件,将下面的代码添加进入
// 定义应用目录 define('APP_PATH', __DIR__ . '/../application/'); // 加载框架引导文件 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文件内更改
use think\Route; //引入Route 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后面带个参数
//首先在index模块下的User控制器中写一个getId方法 public function getId(){ echo input('id'); //输出id } //然后在route.php加上这行代码 Route::rule('getid/:id','index/User/getId'); //最后当我们http://www.yd.com/getid后面加个数字,比如http://www.yd.com/getid/20,页面会显示20
带多个参数路由,比如带两个参数
//index模块下的User控制器中写一个myTime方法 public function myTime(){ echo input('year').' 年 '.input('month').'月'; //输出 n年n月 } //然后在route.php加上这行代码 Route::rule('time/:year/:month','index/User/myTime'); //最后当我们访问http://www.yd.com/time/2018/9,页面会显示2018 年 9月
选择性带参数,就是我们在访问url时,URL后面可以带参数,也可以不带,在写路由文件上的参数带上中括号就行
比如输出年或年月
public function myTime(){ echo input('year').' 年 '.input('month').'月'; //输出 n年n月 } //然后在route.php加上这行代码 Route::rule('time/:year/[:month]','index/User/myTime'); //重点:month外面加[] //最后当我们访问http://www.yd.com/time/2018/9,页面会显示2018 年 9月 //当我们访问http://www.yd.com/time/2018,页面会显示2018 年 月
纯带参数的路由 不建议使用
//路由写法 Route::rule(':x/:y','index/User/XAndY'); //方法 public function XAndY(){ echo input('x').' '.input('y'); } //访问http://www.yd.com/5/3,页面输出5 3
完全匹配路由 在路由的后面加个$符号
public function comp(){ echo '我是完全匹配路由'; } //不加$符号,我们字comp后面加多少路径,比如http://www.yd.com/comp/asdfda/asdfasfd/aaa/bbb,页面都能输出 我是完全匹配路由 Route::rule('comp','index/User/comp'); //加上$符号,我们在comp后面加多少路径,比如http://www.yd.com/comp/asdfda/asdfasfd/aaa/bbb,页面不能输出方法的内容 Route::rule('comp','index/User/comp');
二.批量设置路由
第一种写法,将上面所有单个动态注册的路由批量注册
Route::rule([ "test"=>"index/index/demo", 'getid/:id'=>'index/User/getId', 'time/:year/[:month]'=>'index/User/myTime', ':x/:y'=>'index/User/XAndY', 'comp$'=>'index/User/comp' ],'','get');
第二种方式,这里用get举例
Route::get([ "test"=>"index/index/demo", 'getid/:id'=>'index/User/getId', 'time/:year/[:month]'=>'index/User/myTime', ':x/:y'=>'index/User/XAndY', 'comp$'=>'index/User/comp' ]);
3.配置文件设置路由,使用配置文件批量注册,还是在route.php文件内写
return[ "test"=>"index/index/demo", 'getid/:id'=>'index/User/getId', 'time/:year/[:month]'=>'index/User/myTime', ':x/:y'=>'index/User/XAndY', 'comp$'=>'index/User/comp' ];
路由的请求方式
TP里面有四种请求方式,GET,POST,PUT,DELETE四种方式,如果我们不指定请求类型,默认是*,所有的请求类型
请求方式有两种写法,这里用get举例
Route::rule('qtype','index/User/questType','get'); 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后缀就请求失败
资源路由,你的后台模块可能会有增删改查等操作,但是一个一个写太费劲,资源路由自动帮你生这些路由,你只需要在控制器内写这些方法,
比如
//先创建block namespace app\index\controller; class Block { public function index(){ echo '我是前台模块下的block'; } public function create(){ echo '我是前台模块下的block的create方法'; } public function read($id){ echo $id; } } //然后在route.php下写上资源路由 Route::resource('block','index/Block'); //效果: //当你访问http://www.yd.com/block URL访问的是index方法 //当你访问http://www.yd.com/block/15 URL访问的是read方法 //当你访问http://www.yd.com/block/create URL访问的是create方法
快捷路由
在index模块下创建一个Fastroute控制器,里面写下如下例子,除了index,其他方法都要加上get
namespace app\index\controller; class Fastroute { public function index(){ echo '我是Fast路由的index'; } public function getAA(){ echo "我是getAA"; } public function getBB(){ echo "我是BB"; } public function postInfo() { } public function putInfo() { } public function deleteInfo() { } }
在route.php里面写下快捷路由
//注意:路由名字要和控制器名字一样 Route::controller('Fastroute','index/Fastroute'); //然后我们想访问getAA方法,我们可以通过访问URL http://www.yd.com/Fastroute/AA来访问 //想访问getBB(),可以通过 http://www.yd.com/Fastroute/BB来访问
1
生成URL 两种方式,不太懂有什么用
Url::build(‘index/User/index’);
Url::build(); Url::root('/index.php'); //带入口文件 dump(Url('index/User/index')); dump(Url::build('index/User/index'));
thinkphp5路由心得的更多相关文章
- Vue 路由心得总结
一. 嵌套路由 a.主页面, main.vue , 子页面分别为 shouye.vue / liuyan.vue / about.vue , 首先, 在main.vue加入导 ...
- js和thinkphp5路由拼接一个实例
$.ajax({ type:"get", dataType:"json", url:"/home/index/ajax_page_data/cate_ ...
- ThinkPHP5路由图解
- lnmp1.4 nginx配置thinkphp5
vhost/xxx.conf配置图,重点是红色框框 研究了两三天 ,至此thinkphp5 路由,隐藏index.php全部解决 感谢网友的分享:http://blog.csdn.net/gaoxiu ...
- tp5--路由的使用方法(深入)
懒得写注释,直接上代码 配置文件Route: <?php use think\Route; //tp5路由测试 //动态注册 //Route::rule('路由表达式','路由地址','请求类型 ...
- Java开发学习心得(二):Mybatis和Url路由
目录 Java开发学习心得(二):Mybatis和Url路由 1.3 Mybatis 2 URL路由 2.1 @RequestMapping 2.2 @PathVariable 2.3 不同的请求类型 ...
- ThinkPHP5.0框架开发--第4章 TP5.0路由
ThinkPHP5.0框架开发--第4章 TP5.0路由 第4章 TP5.0 路由 ================================================== 上次复习 1. ...
- ThinkPHP5——route(路由)的详解
路由在框架中的作用打个比方的话,路由好比是WEB应用的总调度室,对于访问的URL地址,路由可以拒绝或者接受某个URL请求,并进行分发调度,而且还有一个副作用是因为路由规则可以随意定义,因此可以让你的U ...
- thinkPHP5.0.22初体验---路由,url访问
“豪情卷起万重浪,吼吼哈哈-”一学thinkPHP才知道这是个国内研究的php web开发框架,瞬间自豪感如电流一般传遍全身 这就不多不说说 一.控制器 所谓MVC编程,无外乎函数(sometimes ...
随机推荐
- 跟我一起学opencv 第四课之图像的基本操作
1.图像是由像素组成的,所以修改了像素就可以实现图像的改变. 2先看灰度图像(单通道): *****2.获取灰度图像的像素值使用: int gray = gray_src.at<uchar&g ...
- ES 15 - Elasticsearch中的数据类型 (text、keyword、date、geo等)
目录 1 核心数据类型 1.1 字符串类型 - string(不再支持) 1.1.1 文本类型 - text 1.1.2 关键字类型 - keyword 1.2 数字类型 - 8种 1.3 日期类型 ...
- windows&lunix下node.js实现模板化生成word文件
最近在做了一个小程序!里面有个功能就是根据用户提交的数据,自动生成一份word文档返回给用户.我也是第一次做这功能,大概思路就是先自己弄一份word模板,后台接受小程序发过来的数据,再根据这些数据将相 ...
- 给WEB初学者的一些有效率的建议
因为IT互联网发展的非常迅速,而web前端这块很火,目前工资水平给的很高,在市场上也是非常的稀缺人才,现在各个行业转行做web前端的很多,今天给大家一些建议,希望新手少走点弯路吧! 建议一:有一个比较 ...
- SQL Server获取连续区间的日期
个人理解的方法有三种 通过系统表master..spt_values获取 用WHILE循环获取 游标获取 CET递归(感谢评论区博友) 方法一:通过系统表master..spt_values获取 1. ...
- Windows Server 2016-图形化之客户端加域(一)
要使用域环境,您必须将计算机加入域.只有加入域的计算机才能使用域资源.在连接期间,将在域中创建一个计算机帐户,以便将计算机作为成员进行身份验证.前边两节我们写到Windows Server 2016- ...
- Sublime中文乱码解决方案
1.首先按下ctrl+shift+P按键,将会出现输入框,其中输入install package. 一般情况下会在安装完成后直接出现输入框,输入ConvertToUtf8即可: 2.若未直接出现输入框 ...
- kettle 备注
1. 基本组成 1.1 spoon: 一个可视化的工具,用于编辑kettle ETL的任务脚本 1.2 span: 用以命令行方式执行spoon的转换 1.3 kitchen: 用以命令行方式执行sp ...
- C# XML序列化/反序列化参考
.NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...
- 升讯威微信营销系统开发实践:(3)功能介绍与此项目推广过程的一些体会( 完整开源于 Github)
GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...