打开admin.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
// +----------------------------------------------------------------------
// [ 应用入口文件 ]
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
实现功能
index.php 这个入口文件,只能去前台模块
admin.php这个入口文件,只能去后台模块(建议后台入口文件复杂一些)
如何实现
在入口文件中
// 定义前台
define('BIND_MODULE', 'index');
// 绑定后台
define('BIND_MODULE', 'admin');
URL地址发生变化
入口绑定之前(http://www.tp.com/admin.php/模块/控制器/方法)
入口绑定之后(http://www.tp.com/admin.php/控制器/方法)
开启apache重写(D:\wamp64\bin\apache\apache2.4.23\conf\httpd.conf)
把注释开启 LoadModule rewrite_module modules/mod_rewrite.so
设置访问权限(D:\wamp64\bin\apache\apache2.4.23\conf\extra\httpd-vhosts.conf)
ServerName www.tp.com
DocumentRoot D:/wamp64/www/study/thinkphpstudy/public
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
入口文件,在网站public目录下新建.htaccess文件,
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
重启服务
关闭后台模块,在后台入口文件中(admin.php),写在加载框架引导文件之后,否则报错。
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
// +----------------------------------------------------------------------
// [ 应用入口文件 ]
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 绑定后台
define('BIND_MODULE', 'admin');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
// 关闭admin模块的路由
\think\App::route(false);
3.如何设置
// 是否开启路由
'url_route_on' => false,
// 是否强制使用路由
'url_route_must' => false,
2.如何设置
// 是否开启路由
'url_route_on' => true,
// 是否强制使用路由
'url_route_must' => false,
2.如何设置
// 是否开启路由
'url_route_on' => true,
// 是否强制使用路由
'url_route_must' => true,
设置路由格式
Route::rule(‘路由表达式’, ‘路由地址’, ‘请求类型’, ‘路由参数(数组)’, ‘变量规则(数组)’)
设置路由文件(项目\application\route.php)
如何设置(route.php)
use think\Route;
// 定义路由规则
// 设置路由之后,就不能使用pathinfo访问了
Route::rule('/','index/index/index');
//注册路由访问到index模块下的index控制器下的index的方法
Route::rule('test','index/index/test');
//注册路由test 访问到index模块下的index控制器下的test的方法
路由的形式
1、静态地址路由
//注册路由test 访问到index模块下的index控制器下的test的方法
Route::rule('test','index/index/test');
2、给路由带参数
route.php中
//注册带参数路由
//http://www.tp.com/course/1
//http://www.tp.com/index/index/index/id/1
Route::rule('course/:id','index/index/course');
index.php中
function course(){
return input('id');
}
3、给路由带多个参数(设置了带几个就必需带几个)
route.php中
//注册带参数路由
//http://www.tp.com/time/1/2
//http://www.tp.com/index/index/shijian/year/1/month/2
Route::rule('time/:year/:month','index/index/shijian');
index.php中
function shijian(){
return input('year').input('month');
}
4、可选参数路由
route.php中
//注册带可选参数路由
//http://www.tp.com/time/1
//http://www.tp.com/index/index/shijian/year/1
Route::rule('time/:year/[:month]','index/index/shijian');
index.php中
function shijian(){
return input('year').input('month');
}
5、全动态路由(不建议使用)
route.php中
//注册带可选参数路由
//http://www.tp.com/1/1
//http://www.tp.com/index/index/dongtai/1/1
Route::rule(':a/:b','index/index/dongtai');
index.php中
function dongtai(){
return input('a').input('b');
}
6、完全匹配路由
route.php中
//注册带可选参数路由
//http://www.tp.com/1/1
//http://www.tp.com/index/index/dongtai/1/1
Route::rule(':a/:b$','index/index/dongtai');
index.php中
function dongtai(){
return input('a').input('b');
}
7、带额外参数
route.php中
// 带额外参数
Route::rule('test2','index/index/test2?id=10&name=tian');
index.php中
function test2(){
dump(input());
}
设置请求类型
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>
1.基本格式
Route::rule([
'路由规则1'=>'路由地址和参数',
'路由规则2'=>['路由地址和参数','匹配参数(数组)','变量规则(数组)'],
...
],'','请求类型','匹配参数(数组)','变量规则');
2.使用
// 动态批量注册
Route::rule([
"index"=>"index/index/index",
"diaoyong"=>"index/index/diaoyong",
"type/:id"=>"index/index/type"
],'','get');
Route::get([
"index"=>"index/index/index",
"diaoyong"=>"index/index/diaoyong",
"type/:id"=>"index/index/type"
]);
return [
"index"=>"index/index/index",
"diaoyong"=>"index/index/diaoyong",
"type/:id"=>"index/index/type"
];
Route::rule(‘路由表达式’,’路由地址’,’请求类型’,’路由参数(数组)’,’变量规则(数组)’);
// ['id'=>'\d{1,3}','name'=>'\w+']设置路由变量规则,id只能是1-3位数字,name只能是hi字符串
Route::rule("course/:id/:name","index/index/course",'get',[],['id'=>'\d{1,3}','name'=>'\w+']);
路由参数是指可以设置一些路由匹配的条件参数,主要用于验证当前的路由规则是否有效,主要包括:
Route::rule('course/:id/:name','index/index/course','get',['method'=>'get','ext'=>'html'],['id'=>'\d{1,3}','name'=>'\w+']);
// 路由参数method 请求方式必需是get
// 路由参数ext 主要设置路由的后缀
参数 说明
method 请求类型检测,支持多个请求类型
ext URL后缀检测,支持匹配多个后缀
deny_ext URL禁止后缀检测,支持匹配多个后缀
https 检测是否https请求
domain 域名检测
before_behavior 前置行为(检测)
after_behavior 后置行为(执行)
callback 自定义检测方法
merge_extra_vars 合并额外参数
bind_model 绑定模型(V5.0.1+)
cache 请求缓存(V5.0.1+)
param_depr 路由参数分隔符(V5.0.2+)
ajax Ajax检测(V5.0.2+)
pjax Pjax检测(V5.0.2+)
Route::resource(‘blog’,’index/blog’);
也可以在定义资源路由的时候限定执行的方法(标识),例如:
Route::resource('blog','index/blog',['only'=>['index','read','edit','update']]);
Route::resource('blog','index/blog',['except'=>['index','delete']]);
标识 | 请求类型 | 生成路由规则 | 对应操作方法(默认) |
---|---|---|---|
index | GET | blog | index |
create | GET | blog/create | create |
save | POST | blog | save |
read | GET | blog/:id | read |
edit | GET | blog/:id/edit | edit |
update | PUT | blog/:id | update |
delete | DELETE | blog/:id | delete |
// 声明快捷路由
Route::controller('blog','index/blog');
class Blog
{
public function geta(){
echo 'aaaaaaaaa';
}
}
https://www.tp.com/blog/a (寻找geta方法)
https://www.tp.com/blog/index (寻找getindex方法)
dump(Url::build('index/index/index'));
dump(url('index/index/index'));
public function index()
{
echo '我是blog控制器index方法';
dump(Url::build('index/index/index'));
dump(url('index/index/index'));
dump(Url::build('index/index/test'));
dump(url('index/index/test'));
dump(Url::build('index/index/course/id/10'));
dump(url('index/index/course/id/10'));
//
dump(Url::build('index/index/abc',['id'=>10,'name'=>'张三']));
dump(url('index/index/abc',['id'=>10,'name'=>'张三']));
dump(url('index/index/abc','id=10&name=100'));
//带锚点
dump(url('index/blog/read#name','id=5'));
dump(url('index/blog/read#name',['id'=>5,'name'=>'100']));
// 带域名
dump(Url::build('index/blog/read#anchor@blog','id=5'));
dump(url('index/blog/read#anchor@blog',['id'=>5,'name'=>'100']));
http://blog.tp.com/blog/read/id/5/name/100.html#anchor
// 加上入口文件
Url::root('/index.php');
dump(url('index/blog/read#anchor@blog',['id'=>5,'name'=>'100']));
//http://blog.tp.com/index.php/blog/read/id/5/name/100.html#anchor
}