ThinkPHP5.0框架開發--第4章 TP5.0路由

ThinkPHP5.0框架開發--第4章 TP5.0路由

第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 // ];
相關文章
相關標籤/搜索