路由的作用:
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路由心得的更多相关文章

  1. Vue 路由心得总结

    一. 嵌套路由 a.主页面,  main.vue ,   子页面分别为  shouye.vue   /    liuyan.vue   / about.vue   , 首先, 在main.vue加入导 ...

  2. js和thinkphp5路由拼接一个实例

    $.ajax({ type:"get", dataType:"json", url:"/home/index/ajax_page_data/cate_ ...

  3. ThinkPHP5路由图解

  4. lnmp1.4 nginx配置thinkphp5

    vhost/xxx.conf配置图,重点是红色框框 研究了两三天 ,至此thinkphp5 路由,隐藏index.php全部解决 感谢网友的分享:http://blog.csdn.net/gaoxiu ...

  5. tp5--路由的使用方法(深入)

    懒得写注释,直接上代码 配置文件Route: <?php use think\Route; //tp5路由测试 //动态注册 //Route::rule('路由表达式','路由地址','请求类型 ...

  6. Java开发学习心得(二):Mybatis和Url路由

    目录 Java开发学习心得(二):Mybatis和Url路由 1.3 Mybatis 2 URL路由 2.1 @RequestMapping 2.2 @PathVariable 2.3 不同的请求类型 ...

  7. ThinkPHP5.0框架开发--第4章 TP5.0路由

    ThinkPHP5.0框架开发--第4章 TP5.0路由 第4章 TP5.0 路由 ================================================== 上次复习 1. ...

  8. ThinkPHP5——route(路由)的详解

    路由在框架中的作用打个比方的话,路由好比是WEB应用的总调度室,对于访问的URL地址,路由可以拒绝或者接受某个URL请求,并进行分发调度,而且还有一个副作用是因为路由规则可以随意定义,因此可以让你的U ...

  9. thinkPHP5.0.22初体验---路由,url访问

    “豪情卷起万重浪,吼吼哈哈-”一学thinkPHP才知道这是个国内研究的php web开发框架,瞬间自豪感如电流一般传遍全身 这就不多不说说 一.控制器 所谓MVC编程,无外乎函数(sometimes ...

随机推荐

  1. Nginx+Keepalived 集群方案

    1.Keepalived高可用软件 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,kee ...

  2. 在.NET Core中使用Exceptionless分布式日志收集框架

    一.Exceptionless简介 Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF, ...

  3. 图解:HTTP 范围请求,助力断点续传、多线程下载的核心原理

    题图:by Charles Loyer 一.序 Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文,而报文又是由报文头(Header) ...

  4. redis的bigkey扫描脚本

    众所周知,redis里面的大key存在是非常危险的一件事情.因为最近的工作转移到中间件相关的工作,因此关注了一下bigkey的扫描方法.首先介绍一下阿里云提供的扫描脚本: 具体可见:https://y ...

  5. 入门rocketmq从浅到深

    目录 一.引言 二.介绍 三.Rocketmq关键概念 1.主题与标签 2.发送与订阅群组 3.Broker与NameServer 4.广播消费与集群消费 5.消息队列 6.集群方式 7.顺序消息 8 ...

  6. SQL内模糊查询语句拼接时单引号'问题

    下面以存储过程查询所有为例,非存储过程(或不是查询所有将*替换为你想要查询的列即可)更为简单, 语法:select * from 表名 where 列名like'%条件%' 拼接后的set @变量名 ...

  7. windows本地安全策略实验-远程桌面连接锁定账户

    windows本地安全策略实验-远程桌面连接锁定账户 实验环境: 服务端:Win7-1:10.10.10.136,开启远程桌面服务 客户端:win7-2:10.10.10.153 确保客户端和服务端能 ...

  8. Pytorch系列教程

    介绍 不久前Pytorch发布了1.0版本,官网的doc页也更新了.这里说下官网的教程很实用,边学pytorch搭网络边学NLP-图像等领域的先进技术. 官网的教程都是英文的,本人就用这个系列博客做个 ...

  9. js原生数组去重

    // ['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b']; 取消重复的元素 数组去重 (for循环) // 把旧数组里面 不重复的元素选取出来放到新数组中 重复 ...

  10. Android or Java的回调粗俗理解 这才是最通俗易懂的

    FUCK,网上装逼者甚众矣! 网上一堆关于JAVA函数回调的见解文章,都说自己写的明白,但没几个我看的明白的. 不如自己写一个东西,回头自己看着舒服 回调函数:定义自己百度 干嘛的? 场景就是事务A执 ...