thinkphp
介紹
1.什麼是框架
- 特徵1 : 一堆代碼的集合
- 特徵2 : 一個半成品應用
- 特徵3 :包含了一些優秀的設計模式
2.爲什麼要使用框架
- 不使用框架的弊端
- 每個人代碼風格不一樣,不便於開發和後期維護
- 一小處的修改,會牽扯出很多地方的修改
- 在後期滿足客戶需求(功能拓展)存在侷限性
- 使用框架的好處
- 使用框架會幫助我們簡單快速高效的開發項目
- 可以然能給我們有更多時間專注於業務邏輯的開發,不需要關注底層架構
- 便於處理多人協作開發中遇到的問題
3 常見的框架
- Zend Framework
是重量級框架,是php語言公司觸屏的官方框架,比較臃腫,啓動較慢
- YII
美國華人開發,外企應用比較多
- Symfony
重量級 國外框架
- Laravel
輕量級 國外框架
- Codelgniter
輕量級框架,簡稱CI框架,代碼火焰。國外框架
- ThinkPhp
是一款國人開發的框架。國內普遍。適合入門級
- ……..4.MVC
- 什麼是MVC
MVC是一種設計模式。他是將用戶的輸入、輸出、邏輯相分離,將整個項目分爲三個部分:
- 控制器(controller)
- 模型(Model)
- 視圖(View)
======================
ThinkPHP 框架
- 1.國人自主開發,中文註釋,中文文檔,論壇
- 2.下載地址 http://www.thinkphp.cn/
下載步驟
第一步:
-第二步:下載經典的3.2.3版本
-第二步:自行解壓
=============================================
目錄結構
最外面的總體結構
Aplication目錄下面的文件
Thinkphp目錄下面的文件
Thinkphp –> config目錄下面的文件
注意:
convention.php 是系統級別的配置文件。另外還有應用級別和分組級別的配置文件
作用範圍上:
- > 系統>應用>分組
優先級上:
- > 分組>應用>系統
thinkphp_3.2.3_full\ThinkPHP\Library\Think目錄下
部署(重點)
1.配置站點目錄
2.配置Apache虛擬主機的配置文件,創建一個虛擬主機
- 文件目錄 :apache\conf\extra\httpd-vhosts.conf
- 步驟:
- 將之前的一段站點配置代碼複製 進行修改
2.重啓Apache
3.修改host文件,將配置文件中申明的兩個域名做一下綁定(解析)
- #### host文件位置:C:\Windows\System32\drivers\etc\hosts
————-
- #### 快速找到位置
- 1.運行 drives
- 2.運行 to hosts
————-
- #### 添加域名綁定解析
看是否綁定成功 在cmd中使用ping命令
在瀏覽器中查看(下圖表示成功)
將代碼文件複製到站點目錄中
-(如:將thinkPHP裏面的文件複製進去)爲了一步步學習thinkPHP特性,我們只複製兩個文件,如下圖
再次通過瀏覽器查看
- ### 打開站點目錄,會發現多了一個Application目錄。(剛剛並沒有複製進去)
- #### 生成的Application和thinkphp解壓包解壓出來的Application不一樣
- ### Common目錄下
細節問題
- ### 自動生成
- 在首次運行index.php入口文件時會自動生成相應的目錄。目錄的名字取決於在index.php定義的常量APP_PATH
- 如果改變的話,就會生成相應的目錄。
————-
- 如果改變的話,就會生成相應的目錄。
- 在首次運行index.php入口文件時會自動生成相應的目錄。目錄的名字取決於在index.php定義的常量APP_PATH
目錄安全文件
- 在自動生成的目錄下都會有一個空白的html文件,文件名叫做index.html.這就叫做目錄安全文件
- 作用:
- 隱藏目錄結構,保證安全
- 隱藏目錄結構,保證安全
默認訪問
- 默認分組/平臺:Home
- 默認控制器:index
- 默認方法:index()
可以在系統配置文件中找到:WWW\thinkPHP-learning\ThinkPHP\Conf
thinkPHP中控制器
控制器創建
命名規則: 控制器名(英文首字母大寫)+Controller+.class.php
例如:
UserController.class.php
<?php #聲明命名控件 namespace Home\Controller; #引入父類控制器 use Think\Controller; #聲明控制器(類)並且繼承父類 class UserController extends Controller { public function test(){ } } ?>
命名空間聲明和使用必須和目錄掛鉤
完善 測試
UserController.class.php
ruby
<?php
#聲明命名控件
namespace Home\Controller;
#引入父類控制器
use Think\Controller;
#聲明控制器(類)並且繼承父類
class UserController extends Controller {
public function test(){
echo "測試UserController.class.php成功";
}
}
- 根據需要,後期可添加控制器
路由形式(重點)
路由:是指訪問項中具體某個方法的URL地址
四種路由形式
- 普通形式路由(get形式路由) (get-2k; post-8M)
http://網址/入口文件?m=分組名&c=控制器名&a=方法名&參數名=參數值
例如訪問上述控制器的方法,並且傳遞一個參數 id = 1:
http://www.xingheng.com/index.php?m=Home&c=User&a=test&id=1
- 缺點:在URL暴露參數,不安全
- Pathinfo形式路由
- PATHINFO模式是系統的默認URL模式,提供了最好的SEO支持,系統內部已經做了環境的兼容處理,所以能夠支持大多數的主機環境。對應前面的URL模式,PATHINFO模式下面的URL訪問地址是:
`aidl
http://網址/入口文件/分組名/控制器/方法/參數名/參數值/
例如訪問上述控制器的方法,並且傳遞一個參數 id = 1:
http://www.xingheng.com/index.php/Home/User/test/id/1/
`
- PATHINFO模式是系統的默認URL模式,提供了最好的SEO支持,系統內部已經做了環境的兼容處理,所以能夠支持大多數的主機環境。對應前面的URL模式,PATHINFO模式下面的URL訪問地址是:
Rewrite形式路由(默認)
- REWRITE模式是在PATHINFO模式的基礎上添加了重寫規則的支持,可以去掉URL地址裏面的入口文件index.php
不能直接使用,需要額外配置WEB服務器的重寫規則。
1.打開重寫(再此文件apache\conf\httpd.conf)
如果是Apache則需要在入口文件的同級添加.htaccess文件
內容如下:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule>
“`
- 接下來就可以使用下面的URL地址訪問了。
http://www.xingheng.com/Home/User/test/id/1/
- 這種路由形式需要Apache的支持,而服務器類型很多,所以不推薦使用
兼容形式路由
兼容模式是用於不支持PATHINFO的特殊環境,URL地址是:
http://網址/入口文件?s=/分組名/控制器名/方法名/參數名/參數值http://www.xingheng.com/index.php?s=/Home/User/test/id/60
只有一個參數s
- 兼容模式配合Web服務器重寫規則的定義,可以達到和REWRITE模式一樣的URL效果。
路由形式的配置
##### 在系統配置文件中體現—>convention.php
- 上圖的配置文件可以看出默認的路由形式是 1 ;就是Pathinfo形式路由
- 不影響其他形式路由形式訪問,影響的是thinkPHP系統封裝的URL組裝函數(U函數)的生成URL地址的形式。
## 分組
#### 一般項目會根據某個功能的適用對象進行分組。也就是平臺.比如前臺和後臺
ThinkPHP下的Application下Home文件夾就是一個分組。可根據需求創建新的。
第一步:創建一個分組目錄,目錄與Home同級
第二步:創建一個分組目錄結構
第三步:在創建的分組下Controller文件夾下創建控制器,寫方法,測試
第四步:訪問路由
“`aidl
http://網址/入口文件/分組名/控制器名/方法
```
----------
![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot032.png?raw=true)
#### *上述就是創建分組的步驟,如果要創建分組,可以根據以上進行*
----------
## 控制器中的跳轉
### 1.URL組裝
- URL組裝就是根據某個規則,來組成一個URL地址,這個功能叫做URL組裝,在ThinkPHP中,一個封裝的函數來處理URL組裝,這個方法叫*U方法*。
- 除了U方法,還有`A B C D E F G I M R S `等方法,這些方法都定義在系統函數庫文件中(`function.php`)
![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot033.png?raw=true)
- *語法格式*
- `U('URL路徑',參數數組);`
```aidl
<?php
#聲明命名空間
namespace Admin\Controller;
#引入父類控制器
use Think\Controller;
#聲明並且繼承父類控制器
class TestController extends Controller{
#編寫測試方法
public function test(){
echo "hello world";
}
public function test1(){
echo U('index');
}
public function test2(){
echo U('Index/index');
}
public function test3(){
//後面的數組可以傳遞多個參數
echo U('Index/index',array('id'=>789456));
}
}
- 使用U方法組裝出當前控制器下index方法地址
- `U('index');`
- ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot034.png?raw=true)
- 用U方法組裝出另外一個控制器Index的index的地址。
- `U('Index/index')`
- ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot035.png?raw=true)
- #### 如果給指定的頁面添加參數,比如給Index控制器下的index方法傳遞一個 id = 789456; 則:
- `U('Index/index',array('id'=>789456))`
- ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot036.png?raw=true)
---------
### 總結出一個通用的格式
- U('分組名/控制器名/方法名',array('參數名1'=>參數值1,參數名2'=>參數值2));
### 1.系統跳轉方法
- 在ThinkPHP系統中喲冾跳轉方法,分別是成功跳轉和失敗跳轉:
- 成功跳轉:$this->success(跳轉提示,跳轉地址,等待時間);
- 失敗跳轉:$this->error(跳轉提示,跳轉地址,等待時間);
- 跳轉提示參數必須要有,後面的可以沒有。
```aidl
public function test4(){
//應該跳到本頁的test方法,效果是“hello world”
$this->success('跳轉成功',U('test'),5);
}
public function test5(){
//應該跳到本頁的test方法,效果是“hello world”
$this->error('跳轉失敗',U('test'),5);
}
}
<div class="se-preview-section-delimiter"></div>
- 成功跳轉
- 失敗跳轉
## ThinkPHP中的視圖(重點)
### 1.什麼是視圖
- 視圖就是MVC三大組成部分中的V(View),負責信息的輸出和展示
### 2.視圖的創建
- 創建的位置需要書分組目錄下的View目錄中與控制器同名的目錄中,例如:
- Test控制器中的login方法,需要一個模板,則模板文件login.html需要放在View/Test/login.html
- 例如創建Test控制器的test方法的模板視圖,則位置如下:
### 3.視圖的展示
- 使用display方法;
- 語法格式:
| 語法格式 | 效果 |
| ———– |:———–:|
| this->display(‘模板文件名’【不帶後綴】 | 展示當前控制器下的指定模板文件 |
| $this->display(‘View目錄下的目錄名/模板文件名【不帶後綴】) | 展示制定控制器目錄下的制定模板文件 |
- 案例:
- 在Test控制器中的test方法中展示test.html
- 在Test控制器中的test1方法中展示test.html
- 在Test控制器中的test2方法中展示View/Demo/test.html
- 在Test控制器中的test方法中展示test.html
### 4.變量分配(初階)
- 在實際開發中不僅僅只是展示模板這麼簡單,往往要展示數據。這個時候變量還在控制器的方法中。需要將數據傳遞到模板中並且展示。這個叫做變量分配。
- 在ThinkPHP系統中封裝好了一個變量分配的方法,這個方法叫做assign
- 具體語法 : php中的變量名);一般情況下,兩個參數名一樣(習慣)
- 案例:在Test控制器中的test方法中傳遞一個變量給test.html展示。
“`php
public function test(){
//echo “hello world”;
$var = data('Y-m-d H:i:s',time());
$this->assign('var',$var);
//展示模板
$this->display();
}
- 目前已經將var變量傳遞給模板文件test.html
,在模板文件中如何展示數據呢?
- 默認的展示變量的方法是:
- {$模板中的變量名}
-
### 5.變量分隔符
- 在ThinkPHP中默認的變量分隔符是“{”和“}”,其是可以被更改的,可以在配置文件中修改
-
### 6.模板常量的替換機制
- 在實際開發中,在引入圖片、css、js等資源文件時,往往需要寫一些比較複雜的路徑,所以這時候需要替換機制。
- 在ThinkPHP中默認給我們幾個常用的模板常量。
- __MODULE__
:表示從域名後面開始一直到分組名結束的路由
- __CONTROLLER__
:表示從域名後面開始一直到控制器結束的路由
- __ACTION__
:表示從域名後面開始一直到方法名結束的路由
- __PUBLIC__
:站點根目錄下的Public目錄的路由
- __SELF__
:表示從域名後面開始一直到路由的最後(如果沒有參數,則__SELF__
和__ACTION__
所表達的內容是一樣的)
- 如下圖:
- ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot043.png?raw=true)
其中ThinkPhp中關於模板常量的代碼在行爲文件中,路徑如下
- ThinkPHP\Library\Behavior\ContentReplaceBehavior.class.php
-
- ThinkPHP\Library\Behavior\ContentReplaceBehavior.class.php
模板常量的核心就是字符串的替換
- 爲了後期使用的方便,我們可以在配置文件中定義一個自定義的模板常量:
- 說明:在開發的時候,建議不要去修改系統配置文件。可以將需要修改的配置項在分組/應用級別的配置文件中去定義
- 上面就是自定義的模板文件。下面測試一下:
- 爲了後期使用的方便,我們可以在配置文件中定義一個自定義的模板常量: