第4章 TP5.0 路由php
==================================================html
上次複習thinkphp
一、配置文件apache
一、慣例配置c#
二、應用配置數組
三、擴展配置app
四、場景配置框架
五、模塊配置iview
六、動態配置ide
二、獲取配置
一、Config類
config::get();
二、config方法
config();
三、配置文件加載順序
慣例配置>應用配置>擴展配置>場景配置>模塊配置>動態配置
四、環境配置
一、配置到根目錄.env文件
二、讀取
Env::get('名字','默認值');
==================================================
今日學習
一、路由做用:
一、簡化URL地址,方便你們記憶
二、有利於搜索引擎優化
二、入口文件:
一、先後臺分離
a、在網站public目錄下(C:\AppServ\www\tp5\public) 新建admin.php
b、打開admin.php
<?php
// 定義應用目錄
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的重寫(C:\AppServ\Apache24\conf\httpd.conf)
# 把註釋開啓
LoadModule rewrite_module modules/mod_rewrite.so
二、設置訪問權限 (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>
三、入口文件,在網站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>
四、重啓服務
五、url地址變化
一、隱藏以前
http://www.tp.com/index.php/Index/test
二、隱藏以後
http://www.tp.com/Index/test
三、Tp5.0路由學習注意:
一、支持三種方式的URL解析規則
二、路由只針對應用,不針對模塊,所以路由的設置也是針對應用下面的全部模塊。
三、關閉後臺模塊,在後臺入口文件(C:\AppServ\www\tp5\public)
// 定義應用目錄
define('APP_PATH', __DIR__ . '/../application/');
// 綁定後臺
define('BIND_MODULE','admin');
// 加載框架引導文件
require __DIR__ . '/../thinkphp/start.php';
// 關閉admin模塊的路由
// 必須寫到 加載框架引導文件 以後不然報錯
\think\App::route(false);
四、路由模式
一、普通模式
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,
二、混合模式
a、定義:
開啓路由,並使用路由定義+默認 PATH_INFO 方式的混合
b、如何設置
// 是否開啓路由
'url_route_on' => true,
// 是否強制使用路由
'url_route_must' => false,
三、強制模式
一、定義:
開啓路由,並設置必須定義路由才能訪問
二、如何設置
// 是否開啓路由
'url_route_on' => true,
// 是否強制使用路由
'url_route_must' => true,
五、設置路由-動態單個註冊
0、設置路由格式
Route::rule('路由表達式','路由地址','請求類型','路由參數(數組)','變量規則(數組)')
一、設置路由文件
C:\AppServ\www\tp5\application\route.php
二、如何設置
// 引入系統類
use think\Route;
// 定義路由規則
// 設置路由以後,就不能使用pathinfo訪問了
// 註冊路由 訪問到Index模塊index控制器index方法
Route::rule('/','index/index/index');
// 註冊路由test 訪問到Index模塊index控制器test方法
Route::rule('test','index/index/test');
三、路由的形式
一、靜態地址路由
// 註冊路由test 訪問到Index模塊index控制器test方法
Route::rule('test','index/index/test');
二、路由帶參數
// 註冊帶參數路由
// 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');
三、可選參數路由
// http://www.tp.com/time/2017
// http://www.tp.com/time/2017/8
Route::rule('time/:year/[:month]','index/index/shijian');
四、全動態路由(不建議你們使用)
Route::rule(':a/:b','index/index/dongtai');
五、徹底匹配路由
// http://www.tp.com/test1 #能夠成功訪問
// http://www.tp.com/test1/1 #不能訪問
Route::rule('test1$','Index/index/test1');
六、路由額外帶參數
Route::rule('test2','Index/index/test2?id=10&name=zhangsan');
四、設置請求類型
一、TP中請求類型
get、post、put、delete
二、Route::rule() 默認支持全部請求類型
三、設置各類請求
// 支持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');
四、如何模擬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>
六、設置路由-動態批量註冊
一、基本格式
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('路由表達式','路由地址','請求類型','路由參數(數組)','變量規則(數組)');
// 設置路由參數id必須是數字,必須1-3位
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');
二、會自動註冊七個路由規則
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 # 刪除操做
十一、設置快捷路由
一、聲明
Route::Controller('blog','index/blog');
二、控制器中
namespace app\index\controller;
class Blog{
public function getindex(){
echo "我是bolg控制器index方法";
}
public function geta(){
echo "AAAAAAAA";
}
}
三、URL訪問
http://www.tp.com/blog/a
http://www.tp.com/blog/index
十二、生成url地址
生成url地址
一、系統類
dump(Url::build('index/index/index'));
二、系統方法
dump(url('index/index/index'));
三、使用
// 普通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"
1 <?php 2 // +---------------------------------------------------------------------- 3 // | ThinkPHP [ WE CAN DO IT JUST THINK ] 4 // +---------------------------------------------------------------------- 5 // | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved. 6 // +---------------------------------------------------------------------- 7 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) 8 // +---------------------------------------------------------------------- 9 // | Author: liu21st <liu21st@gmail.com> 10 // +---------------------------------------------------------------------- 11 12 // 引入系統類 13 use think\Route; 14 15 // 定義路由規則 16 // 路由的基本形式 17 // Route::rule('路由表達式','路由地址','請求類型','路由參數(數組)','變量規則(數組)'); 18 // 靜態路由 19 Route::rule('/','index/index/index'); 20 // Route::rule('test','index/index/test'); 21 // 帶參數路由 22 Route::rule('course/:id','index/index/course'); 23 // Route::rule('time/:year/:month','index/index/shijian'); 24 // 可選參數的路由 25 // Route::rule('time/:year/[:month]','index/index/shijian'); 26 // 全動態路由 27 // Route::rule(':a/:b','index/index/dongtai'); 28 // 徹底匹配路由 29 // Route::rule('test1$','Index/index/test1'); 30 // 帶額外參數 31 // Route::rule('test2','Index/index/test2?id=10&name=zhangsan'); 32 33 // 設置路由的請求方式 34 // 默認支持全部請求方式 35 // 支持get請求 36 // Route::rule('type','Index/index/type','get'); 37 // Route::get('type','Index/index/type'); 38 39 // 支持post請求 40 // Route::rule('type','Index/index/type','post'); 41 // Route::post('type','Index/index/type'); 42 43 // 同時支持get和post 44 // Route::rule('type','Index/index/type','get|post'); 45 46 // 支持全部路由 47 // Route::rule('type','Index/index/type','*'); 48 // Route::any('type','Index/index/type'); 49 50 // 支持put請求 51 52 // Route::rule('type','Index/index/type','put'); 53 // Route::put('type','Index/index/type'); 54 55 56 // 支持delete請求 57 58 // Route::rule('type','Index/index/type','delete'); 59 // Route::delete('type','Index/index/type'); 60 61 // 動態批量註冊路由 62 // Route::rule([ 63 // '路由規則1'=>'路由地址和參數', 64 // '路由規則2'=>['路由地址和參數','匹配參數(數組)','變量規則(數組)'] 65 // ... 66 // ],'','請求類型','匹配參數(數組)','變量規則'); 67 68 // Route::rule([ 69 // "test"=>"index/index/test", 70 // "course/:id"=>"index/index/course" 71 72 // ],'','get'); 73 74 // Route::get([ 75 // "test"=>"index/index/test", 76 // "course/:id"=>"index/index/course" 77 78 // ]); 79 80 // 使用配置文件批量註冊 81 82 // return [ 83 // "test"=>"index/index/test", 84 // "course/:id"=>"index/index/course" 85 // ]; 86 87 // 變量規則 88 // Route::rule('路由表達式','路由地址','請求類型','路由參數(數組)','變量規則(數組)'); 89 90 // Route::rule("course/:id","index/index/course",'get',[],['id'=>'\d{1,3}']); 91 92 93 // 路由參數 94 // Route::rule('路由表達式','路由地址','請求類型','路由參數(數組)','變量規則(數組)'); 95 // Route::rule("course/:id","index/index/course",'get',['method'=>'get','ext'=>'html'],['id'=>'\d{1,3}']); 96 // 路由參數method 請求方式必須是get 97 // 路由參數ext 主要設置路由的後綴 98 99 // 聲明資源路由 100 101 // Route::resource('blog','Index/blog'); 102 103 // 聲明快捷路由 104 105 // Route::controller('blog','Index/blog'); 106 107 // return [ 108 // '__pattern__' => [ 109 // 'name' => '\w+', 110 // ], 111 // '[hello]' => [ 112 // ':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']], 113 // ':name' => ['index/hello', ['method' => 'post']], 114 // ], 115 116 // ];