这一切的一切都得从“Hello world”说起!!!

有很多东西在thinkPHP的官方开发文档上其实都有讲到,我在这里只是想记录自己每天坚持学习PHP的情况,今天接触ThinkPHP的路由,路由这一块可以更好的隐藏我们网站的结构,让我们的网站更安全,这是路由带给我们的一些好处。下面来记录ThinkPHP中的路由这一块主要内容。

一、配置路由

在ThinkPHP框架中找到路由目录下的php文件,系统默认会给我们一个route.php的这个文件,当然我们也能在这个目录下创建自己的一个路由文件,系统会自动加载这个目录下的所有文件

这个就是路由的文件

ThinkPHP的目录结构

二、配置一个简单路由规则

/**
*配置一个简单的路由规则 第一个参数自定义 第二个参数依次是模块/控制器/方法
* ------->路由执行是从方法开始找,接着找控制器,再是模块 若不填写:系统默认使用配置文件中所配置的默认
* 可以在配置文件app.php中配置默认的模块、控制器和方法
*/
Route::rule('good','index/index/index');

这时在浏览器中只需要输入“http://域名/good” 就能找到指定的模块下的控制器中的方法,也可在后方加.html,需要在配置文件app.php中设置URL伪静态的后缀,默认为html

三、路由表达式

//动态路由
//id为动态获取的,也就是在good/后面随意输入都可以路由到index/index/index
Route::rule('good/:id','index/index/index');
//当然id里面的值也是可以获取的
//在控制器中使用门面下的Request中的param('id')可以获取id的值
Route::rule('good/[:id]','index/index/index');
//路由地址 直接路由到操作方法
//看起来似乎和前面的没什么不同,本质的区别是直接执行某个控制器的方法,不需要去解析模块/控制器/操作方法这些,同时不会去初始化模块
Route::rule('good','@index/index/index');

四、路由重定向

比如说重定向到百度:

//重定向到百度
Route::rule('baidu','https://www.baidu.com');

五、路由请求类型

请求类型通常有:post、get、delete、put、等请求,路由请求类型可以指定某些请求来请求某个模块下的某个控制器中的某个方法

//post请求默认模块/默认控制器/默认方法
Route::rule('good','','post');
Route::post('good','');
//get、delete等请求都与上类似
//设置多个请求类型
Route::rule('good','','post|get|delete|put');

六、路由参数

下表从官方文档拿下来的一个参数、说明和对应的方法名

参数 说明 方法名
method 请求类型检测,支持多个请求类型 method
ext URL后缀检测,支持匹配多个后缀 ext
deny_ext URL禁止后缀检测,支持匹配多个后缀 denyExt
https 检测是否https请求 https
domain 域名检测 domain
before 前置行为(检测) before
after 后置行为(执行) after
merge_extra_vars 合并额外参数 mergeExtraVars
complete_match 是否完整匹配路由 completeMatch
model 绑定模型 model
cache 请求缓存 cache
param_depr 路由参数分隔符 depr
ajax Ajax检测 ajax
pjax Pjax检测 pjax
response 绑定response_send行为 response
validate 绑定验证器类进行数据验证 validate
header 设置Response的header信息 header
append 追加额外的参数(5.1.5+ append
middleware 注册路由中间件(5.1.6+ middleware
merge_rule_regex 合并路由规则(V5.1.6+ mergeRuleRegex
filter 请求变量过滤(V5.1.16+ filter

这里举个路由参数的例子:

Route::rule('good','')
->ext('html')
->https(false);
//ext()设置伪静态后缀
//https()是否验证https请求

七、闭包支持

举个hello world的栗子,这一切的一切都得从“Hello world”说起

//闭包支持
Route::rule('good',function (){
return "Hello world";
});

八、URL生成

配置好路由之后给这个路由一个名字,然后在其它的地方调用助手函数url()或者使用门面下的build方法可获取对应的url地址

Route::rule('good','')->name('new_good');
//通过助手函数的方式获取url
//url('new_good');
//通过门面下的Url中的build方法
//Url::build('new_good');

自学PHP的第22天---ThinkPHP中的路由、ThinkPHP目录结构的更多相关文章

  1. [Linux] Linux 中的基本命令与目录结构

    Linux 中的基本命令与目录结构 目录 一.Linux 基本目录结构 二.基本命令 三.浏览目录 四.中间命令 五.更改密码 六.环境变量和 shell 变量 七.命令路径 八.文本编辑器 九.获取 ...

  2. Linux中的文件和目录结构详解

    对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...

  3. ThinkPHP中的"路由"是什么意思?

    路由(route)是指根据url, 分配到对应的处理程序的映射. 简单来说,就是一个路径的解析,根据客户端提交的路径,将请求解析到相应的模块/控制器/方法上. 转载自:https://blog.csd ...

  4. IntelliJ IDEA 中的Java程序目录结构

    --src 应用程序源代码与测试代码的根目录 --main 应用程序代码的源目录 --java 源代码 --resources 项目用到的资源文件 --test 测试程序代码的源目录 --java 测 ...

  5. thinkphp中导入和使用阿里云OSSsdk

    照做绝对行,在ThinkPHP中,第三方库都放在ThinkPHP/Library/Vendor/路径下. 1.下载OSS PHP SDK:https://help.aliyun.com/documen ...

  6. ThinkPHP中,运用PHPExcel,将数据库导出到Excel中

    1.将PHPExcel插件放在项目中,本人位置是ThinkPHP文件夹下,目录结构如下/ThinkPHP/Library//Vendor/...2.直接根据模型,配置三个变量即可使用./** * Ex ...

  7. 自学Linux Shell1.2-Linux目录结构

    点击返回 自学Linux命令行与Shell脚本之路 1.2-Linux目录结构 /:  根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置 ...

  8. ThinkPHP 中使用 IS_AJAX 判断原生 JS 中的 Ajax 出现问题

    问题: 在 ThinkPHP 中使用原生 js 发起 Ajax 请求的时候.在控制器无法使用 IS_AJAX 进行判断.而使用 jQuery 中的 ajax 是没有问题的. 在ThinkPHP中.有一 ...

  9. [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别

    1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...

随机推荐

  1. raw文件转mha文件

    raw格式 在体数据(volume)中,经常会遇到raw文件,raw文件就是其实就是所有体素组成的文件,raw文件必须还有一些描信息才能用(因为得知道数据的size,type,spacing等),就像 ...

  2. python经典算法题:Z字变形

    题目 直接看图! 思路第一步:分组 我们把传入的字符串进行分组, 每个框内的字母为1组: 我们发现每个相同颜色的框内的一组字母的特点是在传入的字符串中是连续的: 我们还发现每组字母的个数是由numRo ...

  3. 手把手教你实现热更新功能,带你了解 Arthas 热更新背后的原理

    文章来源:https://studyidea.cn/java-hotswap 一.前言 一天下午正在摸鱼的时候,测试小姐姐走了过来求助,说是需要改动测试环境 mock 应用.但是这个应用一时半会又找不 ...

  4. Linux 使用记录

      作为web程序员,该掌握的 linux 命令有哪些,稍微高级点的? - 刘志军的回答 - 知乎  https://www.zhihu.com/question/64063454/answer/21 ...

  5. 深入理解 DNS

    深入理解 DNS 简介 DNS(Domain Name System)域名系统,它是一个将域名和 IP 地址相互映射的一个分布式数据库,把容易记忆的主机名转换成主机 IP 地址. DNS使用 TCP ...

  6. java 中的 shuffle()用于打乱list中的元素

    题目描述: 数组里面有{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},请随机打乱顺序生成新的数组: import java.util.ArrayList; import java.ut ...

  7. python:模块0

    一.模块是更高级的封装: 容器:数据的封装 函数:语句的封装 类   :方法和属性的封装 模块:模块就是程序,即每个.py文件 二.引入 import 模块名 from 模块名 import xx(函 ...

  8. Grid表格的js触发事件

    没怎么接触过Grid插件: 解决的问题是:点击Grid表行里的内容触发js方法弹出模态框,用以显示选中内容的详细信息. 思路:给准备要触发的列加上一个css属性,通过这个css属性来获取元素并触发js ...

  9. CSS RESET —— 浏览器样式重置

    CSS Reset 1. CSS Reset为什么存在? 只要您的客户存在使用不同浏览器(ie,firefox,chrome等)的可能,那你就不得不从完美的理想状态回到现实,因为不同核心的浏览器对CS ...

  10. Win32 COM组件 x Android Service

    有些书在介绍和讲解android的Service组件时,会使用后台服务一词,并且与运行在主线程的Activity相对.因为后台一词很容易误解,服务一直运行在后台?什么线程在运行?服务一直有条线程在运行 ...