thinkphp5.0學習(四):入口檔案、路由模式、路由設定和url生成
一、路由的作用
- 簡化URL地址,方便記憶
- 有利於搜尋引擎的優化
二、入口檔案
前後臺分離
- 在網站public目錄下(專案\public)新建admin.php
開啟admin.php
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
繫結模組
實現功能
index.php 這個入口檔案,只能去前臺模組
admin.php這個入口檔案,只能去後臺模組(建議後臺入口檔案複雜一些)如何實現
在入口檔案中// 定義前臺 define('BIND_MODULE', 'index'); // 繫結後臺 define('BIND_MODULE', 'admin');
隱藏入口檔案
開啟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)
<VirtualHost *:80> ServerName www.tp.com DocumentRoot D:/wamp64/www/study/thinkphpstudy/public <Directory "D:/wamp64/www/study/thinkphpstudy/public"> Options +Indexes +Includes +FollowSymLinks +MultiViews 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>
重啟服務
三、tp5.0路由學習注意
- 支援三種方式的url解析規則
- 路由只針對應用,不針對模組,因此路由的設定也是針對應用下的所有模組。
關閉後臺模組,在後臺入口檔案中(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 <[email protected]> // +---------------------------------------------------------------------- // [ 應用入口檔案 ] // 定義應用目錄 define('APP_PATH', __DIR__ . '/../application/'); // 繫結後臺 define('BIND_MODULE', 'admin'); // 載入框架引導檔案 require __DIR__ . '/../thinkphp/start.php'; // 關閉admin模組的路由 \think\App::route(false);
路由的三種模式
普通模式
- 1.定義
關閉路由,完全使用預設的PATH_INFO方式URL: 3.如何設定
// 是否開啟路由 'url_route_on' => false, // 是否強制使用路由 'url_route_must' => false,
混合模式
- 1.定義
開啟路由,並使用路由定義+預設PATH_INFO方式的混合 2.如何設定
// 是否開啟路由 'url_route_on' => true, // 是否強制使用路由 'url_route_must' => false,
強制模式
- 1.定義
開啟路由,並設定必需定義路由才能訪問 2.如何設定
// 是否開啟路由 'url_route_on' => true, // 是否強制使用路由 'url_route_must' => true,
四、設定路由
1.動態單個註冊
設定路由格式
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>
2.設定路由-動態批量註冊
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"
]);
3.設定路由-配置檔案批量註冊
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+)
七、資源路由
1.宣告
Route::resource(‘blog’,’index/blog’);
也可以在定義資源路由的時候限定執行的方法(標識),例如:
Route::resource('blog','index/blog',['only'=>['index','read','edit','update']]);
Route::resource('blog','index/blog',['except'=>['index','delete']]);
2.會動註冊7個路由規則(一定要記憶)
標識 | 請求型別 | 生成路由規則 | 對應操作方法(預設) |
---|---|---|---|
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 |
八、快捷路由
1.宣告
// 宣告快捷路由
Route::controller('blog','index/blog');
2.控制器
class Blog
{
public function geta(){
echo 'aaaaaaaaa';
}
}
3.url訪問
九、url生成
1.系統類
dump(Url::build('index/index/index'));
2.系統方法
dump(url('index/index/index'));
3.使用
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#[email protected]','id=5'));
dump(url('index/blog/read#[email protected]',['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#[email protected]',['id'=>5,'name'=>'100']));
//http://blog.tp.com/index.php/blog/read/id/5/name/100.html#anchor
}