ThinkPHP5.0框架开发--第4章 TP5.0路由
ThinkPHP5.0框架开发--第4章 TP5.0路由
第4章 TP5.0 路由
==================================================
上次复习
1、配置文件
1、惯例配置
2、应用配置
3、扩展配置
4、场景配置
5、模块配置
6、动态配置
2、获取配置
1、Config类
config::get();
2、config方法
config();
3、配置文件加载顺序
惯例配置>应用配置>扩展配置>场景配置>模块配置>动态配置
4、环境配置
1、配置到根目录.env文件
2、读取
Env::get('名字','默认值');
==================================================
今日学习
1、路由作用:
1、简化URL地址,方便大家记忆
2、有利于搜索引擎优化
2、入口文件:
1、前后台分离
a、在网站public目录下(C:\AppServ\www\tp5\public) 新建admin.php
b、打开admin.php
<?php
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
2、绑定模块
1、实现功能
index.php 这个入口文件 只能去前台模块
admin.php 这个入口文件 只能去后台模块 #建议后台的入口文件稍微复杂一些
2、如何实现
在入口文件中
define("BIND_MODULE",'index'); # 绑定前台模块
define("BIND_MODULE",'admin'); # 绑定后台模块
3、URL地址发生改变
1、入口绑定之前
http://www.tp.com/admin.php/模块/控制器/方法
2、入口绑定之后
http://www.tp.com/admin.php/控制器/方法
3、隐藏入口文件
1、开启apache的重写(C:\AppServ\Apache24\conf\httpd.conf)
# 把注释开启
LoadModule rewrite_module modules/mod_rewrite.so
2、设置访问权限 (C:\AppServ\Apache24\conf\extra\httpd-vhosts.conf)
<VirtualHost *:80>
DocumentRoot "C:\AppServ\www\tp5\public"
ServerName www.tp5.com
<Directory "C:\AppServ\www\tp5\public">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
3、入口文件,在网站public目录下新建.htaccess 文件
原理是正则
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
4、重启服务
5、url地址变化
1、隐藏之前
http://www.tp.com/index.php/Index/test
2、隐藏之后
http://www.tp.com/Index/test
3、Tp5.0路由学习注意:
1、支持三种方式的URL解析规则
2、路由只针对应用,不针对模块,因此路由的设置也是针对应用下面的所有模块。
3、关闭后台模块,在后台入口文件(C:\AppServ\www\tp5\public)
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 绑定后台
define('BIND_MODULE','admin');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
// 关闭admin模块的路由
// 必须写到 加载框架引导文件 之后否则报错
\think\App::route(false);
4、路由模式
1、普通模式
a、定义
关闭路由,完全使用默认的 PATH_INFO 方式URL:
b、形式
http://www.tp.com/admin.php/index/index
c、如何设置
在application下面的config.php的配置文件中
// 是否开启路由
'url_route_on' => false,
// 是否强制使用路由
'url_route_must' => false,
2、混合模式
a、定义:
开启路由,并使用路由定义+默认 PATH_INFO 方式的混合
b、如何设置
// 是否开启路由
'url_route_on' => true,
// 是否强制使用路由
'url_route_must' => false,
3、强制模式
1、定义:
开启路由,并设置必须定义路由才能访问
2、如何设置
// 是否开启路由
'url_route_on' => true,
// 是否强制使用路由
'url_route_must' => true,
5、设置路由-动态单个注册
0、设置路由格式
Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)')
1、设置路由文件
C:\AppServ\www\tp5\application\route.php
2、如何设置
// 引入系统类
use think\Route;
// 定义路由规则
// 设置路由之后,就不能使用pathinfo访问了
// 注册路由 访问到Index模块index控制器index方法
Route::rule('/','index/index/index');
// 注册路由test 访问到Index模块index控制器test方法
Route::rule('test','index/index/test');
3、路由的形式
1、静态地址路由
// 注册路由test 访问到Index模块index控制器test方法
Route::rule('test','index/index/test');
2、路由带参数
// 注册带参数路由
// http://www.tp.com/couser/1
// http://www.tp.com/index/index/index/id/1
Route::rule('course/:id','index/index/course');
// 如果路由设置两个参数,必须带两个参数
Route::rule('time/:year/:month','index/index/shijian');
3、可选参数路由
// http://www.tp.com/time/2017
// http://www.tp.com/time/2017/8
Route::rule('time/:year/[:month]','index/index/shijian');
4、全动态路由(不建议大家使用)
Route::rule(':a/:b','index/index/dongtai');
5、完全匹配路由
// http://www.tp.com/test1 #可以成功访问
// http://www.tp.com/test1/1 #不能访问
Route::rule('test1$','Index/index/test1');
6、路由额外带参数
Route::rule('test2','Index/index/test2?id=10&name=zhangsan');
4、设置请求类型
1、TP中请求类型
get、post、put、delete
2、Route::rule() 默认支持所有请求类型
3、设置各种请求
// 支持get请求
Route::rule('type','Index/index/type','get');
// Route::get('type','Index/index/type');
// 支持post请求
// Route::rule('type','Index/index/type','post');
// Route::post('type','Index/index/type');
// 同时支持get和post
// Route::rule('type','Index/index/type','get|post');
// 支持所有路由
// Route::rule('type','Index/index/type','*');
// Route::any('type','Index/index/type');
// 支持put请求
Route::rule('type','Index/index/type','put');
Route::put('type','Index/index/type');
// 支持delete请求
Route::rule('type','Index/index/type','delete');
Route::delete('type','Index/index/type');
4、如何模拟put和delete请求
<form action="type" method="post">**
<p>
<input type="hidden" name="_method" value="PUT">**
<input type="text" name="name" id="">
</p>
<p>
<input type="submit" value="提交">
</p>
</form>
6、设置路由-动态批量注册
1、基本格式
Route::rule([
'路由规则1'=>'路由地址和参数',
'路由规则2'=>['路由地址和参数','匹配参数(数组)','变量规则(数组)']
],'','请求类型','匹配参数(数组)','变量规则');
2、使用
Route::rule([
"test"=>"index/index/test",
"course/:id"=>"index/index/course"
],'','get');
Route::get([
"test"=>"index/index/test",
"course/:id"=>"index/index/course"
]);
7、设置路由-配置文件批量注册
return [
"test"=>"index/index/test",
"course/:id"=>"index/index/course"
];
8、变量规则
// Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');
// 设置路由参数id必须是数字,必须1-3位
Route::rule("course/:id","index/index/course",'get',[],['id'=>'\d{1,3}']);
9、路由参数
// Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');
Route::rule("course/:id","index/index/course",'get',['method'=>'get','ext'=>'html'],['id'=>'\d{1,3}']);
// 路由参数method 请求方式必须是get
// 路由参数ext 主要设置路由的后缀
10、资源路由
1、声明
Route::resource('blog','index/blog');
2、会自动注册七个路由规则
get blog index # 后台展示
get blog/create create # 添加页面
post blog save # 增加操作
get blog/:id read
get blog/:id/edit edit # 修改页面
put blog/:id update # 更新操作
delete blog/:id delete # 删除操作
11、设置快捷路由
1、声明
Route::Controller('blog','index/blog');
2、控制器中
namespace app\index\controller;
class Blog{
public function getindex(){
echo "我是bolg控制器index方法";
}
public function geta(){
echo "AAAAAAAA";
}
}
3、URL访问
http://www.tp.com/blog/a
http://www.tp.com/blog/index
12、生成url地址
生成url地址
1、系统类
dump(Url::build('index/index/index'));
2、系统方法
dump(url('index/index/index'));
3、使用
// 普通url地址
dump(Url::build('index/index/index'));
dump(url('index/index/index'));
// 带参数url
dump(url('index/index/abc',['id'=>10,'name'=>"张三"]));
dump(url('index/index/abc','id=10&name=100'));
// string(45) "/index/abc/id/10/name/%E5%BC%A0%E4%B8%89.html"
// string(30) "/index/abc/id/10/name/100.html"
// 带锚点
dump(url('index/index/abc#name',['id'=>10,'name'=>"100"]));
// string(35) "/index/abc/id/10/name/100.html#name"
// 带域名
dump(url('index/index/abc#name@blog',['id'=>10,'name'=>"100"]));
// string(53) "http://blog.tp.com/index/abc/id/10/name/100.html#name"
// 加入口文件
Url::root('/index.php');
dump(url('index/index/abc#name@blog',['id'=>10,'name'=>"100"]));
// string(63) "http://blog.tp.com/index.php/index/abc/id/10/name/100.html#name"
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +---------------------------------------------------------------------- // 引入系统类
use think\Route; // 定义路由规则
// 路由的基本形式
// Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');
// 静态路由
Route::rule('/','index/index/index');
// Route::rule('test','index/index/test');
// 带参数路由
Route::rule('course/:id','index/index/course');
// Route::rule('time/:year/:month','index/index/shijian');
// 可选参数的路由
// Route::rule('time/:year/[:month]','index/index/shijian');
// 全动态路由
// Route::rule(':a/:b','index/index/dongtai');
// 完全匹配路由
// Route::rule('test1$','Index/index/test1');
// 带额外参数
// Route::rule('test2','Index/index/test2?id=10&name=zhangsan'); // 设置路由的请求方式
// 默认支持所有请求方式
// 支持get请求
// Route::rule('type','Index/index/type','get');
// Route::get('type','Index/index/type'); // 支持post请求
// Route::rule('type','Index/index/type','post');
// Route::post('type','Index/index/type'); // 同时支持get和post
// Route::rule('type','Index/index/type','get|post'); // 支持所有路由
// Route::rule('type','Index/index/type','*');
// Route::any('type','Index/index/type'); // 支持put请求 // Route::rule('type','Index/index/type','put');
// Route::put('type','Index/index/type'); // 支持delete请求 // Route::rule('type','Index/index/type','delete');
// Route::delete('type','Index/index/type'); // 动态批量注册路由
// Route::rule([
// '路由规则1'=>'路由地址和参数',
// '路由规则2'=>['路由地址和参数','匹配参数(数组)','变量规则(数组)']
// ...
// ],'','请求类型','匹配参数(数组)','变量规则'); // Route::rule([
// "test"=>"index/index/test",
// "course/:id"=>"index/index/course" // ],'','get'); // Route::get([
// "test"=>"index/index/test",
// "course/:id"=>"index/index/course" // ]); // 使用配置文件批量注册 // return [
// "test"=>"index/index/test",
// "course/:id"=>"index/index/course"
// ]; // 变量规则
// Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)'); // Route::rule("course/:id","index/index/course",'get',[],['id'=>'\d{1,3}']); // 路由参数
// Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');
// Route::rule("course/:id","index/index/course",'get',['method'=>'get','ext'=>'html'],['id'=>'\d{1,3}']);
// 路由参数method 请求方式必须是get
// 路由参数ext 主要设置路由的后缀 // 声明资源路由 // Route::resource('blog','Index/blog'); // 声明快捷路由 // Route::controller('blog','Index/blog'); // return [
// '__pattern__' => [
// 'name' => '\w+',
// ],
// '[hello]' => [
// ':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
// ':name' => ['index/hello', ['method' => 'post']],
// ], // ];
ThinkPHP5.0框架开发--第4章 TP5.0路由的更多相关文章
- ThinkPHP5.0框架开发--第5章 TP5.0 控制器
ThinkPHP5.0框架开发--第5章 TP5.0 控制器 第5章 TP5.0 控制器 ============================================== 上次复习 1.路 ...
- ThinkPHP5.0框架开发--第3章 TP5.0 配置
ThinkPHP5.0框架开发--第3章 TP5.0 配置 第3章 TP5.0 配置 ========================================================= ...
- ThinkPHP5.0框架开发--第1章 Tp5.0安装
ThinkPHP5.0框架开发--第1章 Tp5.0安装 第1章 Tp5.0 安装 ======================================================== 今 ...
- ThinkPHP5.0框架开发--第2章 TP5.0架构
ThinkPHP5.0框架开发--第2章 TP5.0架构 第2章 TP5.0架构 ================================================== 上次复习 1.如 ...
- ThinkPHP5.0框架开发--第11章 TP5.0 杂项
ThinkPHP5.0框架开发--第11章 TP5.0 杂项 第11章 TP5.0 杂项 =============================================== 今日学习 1. ...
- ThinkPHP5.0框架开发--第10章 TP5.0验证器
ThinkPHP5.0框架开发--第10章 TP5.0验证器 第10章 TP5.0验证器 ======================================= 今日学习 1.验证器 1) 控 ...
- ThinkPHP5.0框架开发--第9章 TP5.0视图和模板
ThinkPHP5.0框架开发--第9章 TP5.0视图和模板 第9章 TP5.0视图和模板 ===================================================== ...
- ThinkPHP5.0框架开发--第8章 TP5.0 模型
ThinkPHP5.0框架开发--第8章 TP5.0 模型 第8章 TP5.0 模型 ================================================= 今日学习 1. ...
- ThinkPHP5.0框架开发--第7章 TP5.0数据库操作
ThinkPHP5.0框架开发--第7章 TP5.0数据库操作 第7章 TP5.0数据库操作 ===================================================== ...
随机推荐
- 2015.04.23,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 33
1.eat, drink, and be merry 拉丁动词vivo(to live),加上名词vita(life),是许多重要英文词汇的来源. convivo是拉丁动词to live togeth ...
- Cocos Code IDE
https://www.cnblogs.com/luorende/p/6464181.html http://www.cocoachina.com/bbs/read.php?tid-464164.ht ...
- 0x08 总结与练习
1:前面已经搞好了. 2:poj2965 这种开关问题一个点要么点一次要么不点,枚举所有点的方案实行即可 #include<cstdio> #include<iostream> ...
- Git 学习笔记(三)
我记得最初学习的时候我提到了使用版本控制软件的最大好处是让你可以永远后悔,那么如何吃后悔药呢?在项目过程中我们很有可能因为各种因素对我们的操作进行回滚,对于传统的版本控制系统来说,并不复杂,拿 SVN ...
- POJ 3660 Floyd传递闭包
题意:牛有强弱,给出一些牛的强弱的胜负关系,问可以确定几头牛的排名. 思路: Floyd传递闭包 // by SiriusRen #include <bitset> #include &l ...
- Python学习小计
1.初学Python最好选择2.7版本,因为大部分Python书籍的示例代码是基于这个版本的 2.Python安装可以参考百度经验完成 如果在电脑上同时安装2个版本,则CMD启动时只需要: py -2 ...
- 几个月来使用mobx代替redux的一些总结
遇到的一些小坑 React组件内部想要调用store里的action方法,得如下图,否则不会调用(这个现在看来好像不对,待重新检验) 而不能如下图 组件中调用改变store的action后,状态变化并 ...
- 产品开发也要看阵容,APP开发只需五步变得靠谱
最早认识的一个朋友是程序员,曾经到一家外包公司接单子,小外包公司经常遇到的问题就是和需求方谈产品功能.客户要做外包,对方让他一次性报价,但是客户连功能点自己都不清楚,这时朋友说还是按照具体功能点来做吧 ...
- iOS构建流畅的交互界面--CPU,GPU资源消耗的原因和解决方案
CPU资源消耗的原因和解决方案对象创建轻量对象代替重量对象* 不需要响应触摸事件的控件:CALayer显示* 对象不涉及UI操作,则尽量放到后台线程创建* 包含有CALayer的控件只能在主线程创建和 ...
- CorelDRAW X6+PhotoZoom这组合,无敌了啊!
520就这样毫无察觉的过去了,对于额这种单身狗,额表示,什么520,什么情人节,统统略过,,可是,可是,即便这样,还是硬生生的吃了一把来势凶猛的远在天际的狗粮,当我看到CorelDRAW X6和Pho ...