TP框架學習筆記第一天
此文章為自己書寫,在Word上做的筆記,然後拷貝到這上邊的,無任何抄襲。另外若是程式有任何問題可以評論,也可私信我。
若是想看整個學習筆記程式碼和資料庫可點選此處(包含個人書寫的專案程式碼及資料庫檔案)。
第一天概述
1.建立應用
2.四種路由形式
3.控制器呼叫檢視模板
4.已有模板與框架結合
5.建立Admin分組
6.使用常量
7.配置檔案
8.兩種模式
9.使用smarty引擎
第一天詳細內容
1.什麼是框架
php框架是許多程式碼的集合,這些程式碼是程式結構的程式碼(並不是業務程式碼)程式碼中有許多函式、類、功能類包,框架的程式碼按照一定的標準組成了一個有機的功能體,這個功能體中包含了許多設計模式如MVC,單例,AR等等。
2.不使用框架開發遇到的問題
(1)程式碼編寫沒有統一的規範
(2)程式專案的生命時間特別短,不延續
(3)一個小地方的修改會牽扯到全域性變化,牽一髮而動全身
(4)不能很好滿足客戶各方面需求
3.使用框架的好處
(1)框架可以幫助我們快速、穩定、高效搭建程式系統
(2)該系統由於框架的使用使得本身的維護性、靈活性、適應客戶需求方面得到最大化的增強。
(3)使用框架的過程中可以使我們的注意力全部集中在業務層面,而無需關心底層架構。
(4)可以節省很多程式碼的工作量
4.相關框架
(1)zendframework
php語言公司zend釋出的官方框架,有許多OOP面向物件內容,功能非常豐富,重量級框架
重量級:(1)語言級別(高階語言OOP)(2)功能豐富
輕量級:(1)語言級別(面向過程或有少許的OOP)(2)功能相對較少但是實用
高階語言:例如java是用類對變數、函式的封裝
中級語言:例如C是用變數、函式對中低語言程式碼的封裝
中低階語言:例如組合語言,比如低階語言再高階一點的語言,是對二進位制程式碼的封裝
低階語言:二進位制程式碼語言
(2)Yii
國人(華人)自己開發的框架,名字(xue qiang),重量級框架,純OOP框架,該框架的特點是把程式碼的重用性發揮到極致,速度非常快。外企使用最多的框架。
該框架思想來源於symfony、jQuery等。
作者之前是prado框架的核心維護人員,維護該框架3年之久。
(3)cakephp
cakePHP是一個運用了諸如ActiveRecord、Association Data Mapping、Front Controller和MVC等著名設計模式的快速開發框架。該框架的主要目標是讓各種層次的PHP開發人員都能快速靈活的開發健壯的web應用。
(4)symfony
symfony是一個基於MVC模式的面向物件的PHP5框架。
(5)ThinkPHP
輕量級框架。內部OOP和麵向過程程式碼都純在,是國人自己開發的框架。
ThinkPHP是一個開源的PHP框架,是為了簡化企業級應用開發和敏捷web應用開發而誕生的。最早誕生於2006年初,原名FCS,2007元旦正式更名為ThinkPHP,並且遵循Apache2開源協議釋出。早期的思想架構來源於Struts,後來經過不斷地改進和完善,同時也借鑑了國外很多優秀的框架和模式,使用面向物件的開發結構和MVC模式, 融合了Struts的Action和Dao思想和JSP的TagLib(標籤庫)、RoR的ORM對映和ActiveRecord模式,封裝了CURD和一些常用操作,單一入口模式等,在模板引擎、快取機制、認證機制和擴充套件性方面均有獨特的表現。
5.模板檔案介紹
6.路由形式
Get方式:
(1)http://網站域名/index.php?m=分組名&c=控制器名&a=方法名
引數m:module,表示分組
引數c:controller,表示控制器
引數a:action,表示具體的請求方法
例如:以http://www.weizai.com/為例,則訪問Home分組下的Index控制器下的index方法,則地址可以寫成:
http://www.weizai.com/index.php?m=Home&c=Index&a=index
pathinfo路由形式【預設形式】
語法:http://網址域名/index/模組名/控制器名/方法名/引數名/引數值…
例如:以
http://www.weizai.com/index.php/Home/Index/index
重寫(rewrite)方式
語法:http://網址域名/Home/Index/index/引數名/引數值…
例如:以http://www.weizai.com/為例,則訪問Home分組下的Index控制器下的index方法,則地址可以寫成:
http://www.weizai.com/Home/Index/index
【注意】
該路由形式是需要配置之後才可以使用的,不配置無法使用。
【配置方法】
(1)需要修改Apache的配置檔案
去除配置檔案中的rewrite模組前面的註釋符:
同時需要修改Apache虛擬主機的配置
需要將AllowOverride設定為All
(2)將.htaccess檔案複製到當前站點目錄下:
此時配置完成,就可以使用第三個路由形式了。
相容路由形式
語法:http://網址域名/index.php?s=/模組名/控制器名/方法名/引數名/引數值…
問:上述形式中,有幾個引數?
答:引數只有1個,引數是s,因為沒有&符號。
例如:以http://www.weizai.com/為例,則訪問Home分組下的Index控制器下的index方法,則地址可以寫成:
http://www.weizai.com/index.php?s=/Home/Index/index
7.控制器的建立
控制器是以檔案的形式存在的,需要建立一個檔案。
檔案的命名規範(當前版本為例):控制器名(首字母大寫)+Controller.class.php
檔案裡面需要遵循三個步驟:
(1)宣告名稱空間
(2)引入需要使用的類元素
(3)正式的宣告類,並且根據需要來決定是否需要繼承其他的類
例如:需要建立商品控制器,命名為Goods
檔案命名:GoodsController.class.php
8.模型的建立
在ThinkPHP中,模型的本質也是一個類檔案,所以其編寫的要求基本上和控制器是一致的。
檔案的命名規範:模型名(首字母大寫)+Model.class.php
裡面程式碼的三個步驟:
(1)宣告名稱空間
(2)引入需要使用的類元素
(3)正式的宣告類,並且根據需要來決定是否需要繼承其他的類
9.檢視的建立
檢視就是展示給使用者看的模板。
存放位置是在對應模組下的View目錄下。
例如:需要給Goods控制器對應的方法test,建立模板,則檢視檔案需要放到View/Goods/test.html。
如果需要在控制器中展示模板/檢視檔案,則需要在方法的最後呼叫display方法。
語法:
$this->display(‘控制器/方法’);//訪問其他控制器下的模板檔案
擴充套件:將方法中的變數分配到模板中使用的方法。
$this->assign(模板中的變數名,PHP中的變數);
在模板中展示:
10.ThinkPHP中的2種模式
在ThinkPHP中提供了兩種模式(模式:不是設計模式)
除錯模式/開發模式:是在開發中建議開啟的模式。【預設的形式】
生產模式:在專案上線執行的時候建議開啟的模式。
切換兩個模式的方式需要配置一個配置項。在ThinkPHP中除了配置檔案中有配置項,在其他的一些零星的檔案中,也存在配置項。
針對兩個模式的配置項存在於/index.php中。
配置項:APP_DEBUG
除錯模式下的錯誤:
生產模式下的錯誤:
11.將現有模板檔案與TP框架結合
具體實現步驟:
(1)複製模板檔案到View指定目錄
(2)複製css,js,img靜態資原始檔到系統指定目錄
(3)把靜態資源(css,js,img)檔案的路徑設定為常量資訊(在index.php入口檔案設定)
(4)在模板檔案中引入靜態資源(css,js,img)檔案,路徑相對入口檔案設定
最好設定為絕對地址(相對工作站點虛擬主機目錄的絕對地址)
為了後期模板維護方便,通過常量設定靜態資源訪問目錄地址
(5)css檔案本身的圖片設定,其路徑相對於css本身設定
12.建立後臺分組頁面
將現有的模板檔案按照8的步驟與TP框架結合。
TP框架提供的常量:
http://網址/index.php/分組/控制器/操作方法/引數名/引數值…
MODULE:路由地址分組資訊(http://網址/index.php/分組)
CONTROLLER:路由地址控制器資訊(http://網址/index.php/分組/控制器)
ACTION:路由地址操作方法資訊(http://網址/index.php/分組/控制器/操作方法)
SELF:路由地址的全部資訊(http://網址/index.php/分組/控制器/操作方法/引數名/引數值…)
MODULE_NAME:分組名稱
CONTROLLER_NAME:控制器名稱
ACTION_NAME:操作方法名稱
這些常量可以直接使用,不用加任何php程式碼。
13.細節處理
13.1配置檔案介紹
(1)ThinkPHP/Conf/convention.php 系統主要配置檔案
(2)shop/Common/Conf/config.php 當前shop專案的配置檔案
(3)shop/Home/Conf/config.php 當前shop專案Home分組下的配置檔案
以上三個配置檔案,若存在同名的配置變數,後者覆蓋前者。
系統中並不是所有的配置引數都在convention.php檔案中。
(1)大部分是在convention.php中定義
(2)在Behavior行為檔案裡邊有定義一部分(例如:SHOW_PAGE_TRACE)
(3)在框架的程式碼角落裡邊有零星的一點配置變數(例如:MODULE_ALLOW_LIST)
13.2設定預設分組
13.3框架的兩種模式
開發模式和生產模式:
//設定為除錯模式
define(‘APP_DEBUG’,True);
define(‘APP_DEBUG’,false);
開發模式(除錯模式):
每次請求會載入每個應用程式檔案,比較耗費資源,錯誤提示比較友好。
會自動清除common-runtime.php檔案,會依次載入每個需要的檔案
生產模式:
該模式比較節省資源,會把請求過程中一些通用程式檔案給“編譯”到一個檔案裡邊(shop/Runtime/common-runtime.php),這樣系統的每次請求載入檔案數目就比較少(節省了許多檔案開啟、關閉功能)
錯誤資訊模糊,不方便除錯。
13.4開啟smarty模板引擎
將頁面的內容改為smarty模板可以解析的程式碼:
13.5smarty模板{}標記有衝突
{}與css或者js有衝突解決辦法:
(1)在{}與內容中間加空格
(2)讓{}的左右括號不在同一行
(3)設定literal標記,設定之後內部內容不會被smarty模板解析
(4)將{}這個左右標記進行替換
14.框架的執行流程(瞭解)
index.php–>./ThinkPHP/ThinkPHP.php–>Think/Think.php–>Think/App.class.php