産品特色
編輯推薦
本書實戰性很強,沒有冗長的概念講解,都是實際項目中使用的實用技術,比如驗證碼、文件上傳、圖像處理、調試、安全、緩存等。留言闆、博客、論壇、微信公眾平颱開發4個實戰項目案例,使讀者盡快切入ThinkPHP企業級項目開發。
內容簡介
PHP是一種通用開源腳本語言,開源、跨平颱、易於使用,主要適用於Web開發領域。MVC模式使得PHP在大型Web項目開發中耦閤性低、重用性高、可維護性高、有利於軟件工程化管理。本書以實用性為目標,係統地介紹瞭ThinkPHP框架的相關技術及其在Web開發中的應用。
全書共14章,每一章都是相對獨立的知識點的集閤。內容涵蓋瞭ThinkPHP常用功能模塊和實用技巧、MySQL數據庫的設計與應用、完整的Web項目開發流程等目前PHP開發中*主流的技術,每一章都有大量的示例以及詳盡的注釋,便於讀者的理解和掌握。*後通過4個完整的項目詳細介紹瞭Web應用從設計到運行的各個環節,便於讀者更好地實踐。
對於擁有PHP基礎而不知道下一步該做什麼的讀者而言,本書不失為一本好的入門教材,本書所有的實例都可以在Web開發中直接使用,使讀者能夠加快Web應用開發的進程。此外,本書也適閤對於網絡開發有興趣的讀者,以及大中專院校和培訓機構的師生閱讀與參考。
作者簡介
夏磊,目前從事軟件開發工作。精通PHP服務器腳本語言技術,善於把握運用新技術,如LAMP&LNMP;平颱以及Node.js平颱下Web軟件的開發、軟件架構、設計模式等。作者博客上大量的PHP相關技術文章,深受讀者好評。
目錄
第1章 ThinkPHP入門 1
1.1 MVC模式概述 1
1.2 ThinkPHP是什麼 2
1.3 搭建PHP開發環境 2
1.3.1 獲取UPUPW 2
1.3.2 安裝UPUPW 3
1.3.3 目錄結構說明 4
1.3.4 添加虛擬主機 4
1.3.5 安裝集成開發環境PHPStorm 6
1.4 *個ThinkPHP程序 7
1.5 應用結構說明 8
1.5.1 目錄說明 8
1.5.2 入口文件 8
1.5.3 自動生成 9
1.5.4 模塊 9
1.5.5 控製器 9
1.6 術語解釋 10
1.7 小結 11
第2章 配 置 12
2.1 配置類型 13
2.1.1 默認配置 13
2.1.2 公共配置 13
2.1.3 模式配置 13
2.1.4 調試配置 14
2.1.5 場景配置 14
2.1.6 模塊配置 14
2.1.7 擴展配置 14
2.1.8 動態配置 15
2.2 配置操作 15
2.2.1 C函數 16
2.2.2 讀取配置 17
2.2.3 加載擴展配置 19
2.2.4 寫入配置 20
2.3 小結 23
第3章 路 由 24
3.1 URL的三種模式 24
3.1.1 動態URL 24
3.1.2 靜態URL 25
3.1.3 僞靜態URL 25
3.2 ThinkPHP的路由 25
3.2.1 路由模式 25
3.2.2 路由配置 29
3.3 小結 34
第4章 控製器 35
4.1 控製器的定義 35
4.2 前置操作和後置操作 37
4.3 動作參數綁定 38
4.4 僞靜態 40
4.5 URL大小寫 40
4.6 URL生成 41
4.6.1 地址錶達式 41
4.6.2 參數 41
4.6.3 僞靜態後綴 41
4.6.4 URL模式處理 41
4.6.5 生成路由地址 42
4.7 Ajax返迴 42
4.8 重定嚮和頁麵跳轉 43
4.8.1 重定嚮 43
4.8.2 頁麵跳轉 44
4.9 HTTP請求方法 46
4.10 讀取輸入 48
4.11 空操作 50
4.12 空控製器 51
4.13 小結 52
第5章 模 型 53
5.1 準備工作 53
5.2 模型定義 54
5.3 模型實例化 54
5.3.1 new實例化 54
5.3.2 M函數實例化 55
5.3.3 D函數實例化 55
5.3.4 空模型實例化 55
5.4 連貫操作 55
5.4.1 where 56
5.4.2 table 57
5.4.3 alias 57
5.4.4 data 58
5.4.5 field 58
5.4.6 order 59
5.4.7 limit 60
5.4.8 page 61
5.4.9 group 61
5.4.10 having 61
5.4.11 join 61
5.4.12 union 62
5.4.13 distinct 62
5.4.14 lock 62
5.4.15 cache 63
5.4.16 fetchSql 63
5.4.17 strict 64
5.4.18 index 64
5.5 CURD操作 64
5.5.1 創建數據 64
5.5.2 插入數據 65
5.5.3 讀取數據 65
5.5.4 更新數據 66
5.5.5 刪除數據 67
5.6 查詢語言 68
5.6.1 查詢方式 68
5.6.2 錶達式查詢 68
5.6.3 快捷查詢 70
5.6.4 區間查詢 71
5.6.5 統計查詢 71
5.7 自動驗證 72
5.8 自動完成 78
5.9 視圖模型 82
5.10 關聯模型 85
5.10.1 HAS_ONE 85
5.10.2 BELONGS_TO 88
5.10.3 HAS_MANY 89
5.10.4 MANY_TO_MANY 90
5.11 小結 91
第6章 視 圖 92
6.1 模闆定義 92
6.2 模闆主題 92
6.3 模闆賦值 93
6.4 模闆渲染 93
6.5 總結 94
第7章 模 闆 95
7.1 變量輸齣 95
7.1.1 輸齣形式 95
7.1.2 測試 96
7.2 係統變量 98
7.2.1 語法形式 98
7.2.2 配置輸齣 98
7.2.3 測試 98
7.3 函數 100
7.3.1 函數類型 100
7.3.2 測試 100
7.4 變量默認值 101
7.4.1 語法形式 101
7.4.2 測試 102
7.5 算術運算符 103
7.5.1 語法形式 103
7.5.2 測試 103
7.6 模闆繼承 105
7.6.1 語法形式 105
7.6.2 測試 106
7.7 視圖包含 107
7.7.1 語法形式 107
7.7.2 模闆錶達式 107
7.7.3 模闆文件 107
7.7.4 測試 107
7.8 內置標簽 108
7.8.1 volist標簽 109
7.8.2 foreach標簽 110
7.8.3 for標簽 110
7.8.4 switch標簽 111
7.8.5 比較標簽 111
7.8.6 empty標簽 114
7.8.7 defined標簽 114
7.8.8 標簽嵌套 114
7.8.9 import標簽 115
7.8.10 使用原生PHP 115
7.8.11 不解析輸齣 115
7.9 模闆布局 116
7.10 模闆常量替換 116
7.11 模闆注釋 117
7.12 測試 118
7.13 總結 126
第8章 調 試 127
8.1 調試模式 127
8.2 異常處理 127
8.3 日誌 128
8.3.1 日誌級彆 129
8.3.2 記錄方式 129
8.3.3 寫入日誌 129
8.4 變量輸齣 130
8.5 執行統計 130
8.6 SQL輸齣 131
8.7 測試 131
8.7.1 異常測試 131
8.7.2 日誌測試 132
8.7.3 變量輸齣測試 133
8.7.4 執行統計測試 133
8.7.5 SQL輸齣測試 134
8.8 總結 135
精彩書摘
第 12 章
博客係統項目實戰 ?
12.1 項目目的
本博客係統項目目的如下:
記載個人學習、工作、生活上一些值得迴味的事情,以及一些值得分享或者探討的技術。
用於社會溝通和交友,和他人分享自己的成功。
自我學習、自我提高。
12.2 需求分析
提到博客,大部分人都不會陌生,畢竟大名鼎鼎的wordpress可是業界神話。本章需要實現的也是一個博客係統。當然,並沒有wordpress那麼強大,不過“麻雀雖小、五髒俱全”,一個博客應有的功能還是需要有的。
寫作。博客的核心功能就是寫作,而且是獨自寫作,有寫作就有文章,有文章就涉及文章的分類、發錶、編輯、刪除。
評論。既然項目目的中有“用於社會溝通和交友”,那麼社會上的讀者如何與作者互動呢?所以,評論功能必不可少。有瞭評論就需要發錶評論、管理評論。
友情鏈接。好文章如何讓彆人知道呢?單憑自己的力量是不夠的,所以閤理地與他人交換友情鏈接是博客的一種推廣手段。
12.3 功能設計
通過需求分析的結果,可以總結齣博客係統需要以下功能:
? 管理員登錄、修改密碼、退齣登錄。
? 文章分類添加、編輯、刪除。
? 文章添加、編輯、刪除。
? 發錶評論、管理評論。
? 添加友情鏈接、刪除友情鏈接、展示友情鏈接。
12.4 數據庫設計
根據需求分析以及功能設計,設計齣如圖12-1所示數據庫模型。
圖12-1
可以看到分類錶、文章錶、評論錶之間存在關係。
12.5 數據庫字典
1. 文章分類(blog_category)
文章分類錶設計如錶12-1所示。
錶12-1
字段名稱 類型 說明
categoryId int(10) 主鍵,自增
name varchar(20) 分類名稱
isNav tinyint(1) 是否顯示在導航欄
total int 文章總數
sort tinyint(4) 排序
2. 文章錶(blog_article)
文章錶設計如錶12-2所示。
錶12-2
字段名稱 類型 說明
articleId int(11) 主鍵,自增
Title varchar(40) 文章標題
Description varchar(100) 文章簡介
Image varchar(128) 文章封麵
Hits int(11) 點擊數
createdAt int(11) 文章發布時間(時間戳)
updateAt int(11) 文章更新時間
Status tinyint(1) 狀態(發錶,不發錶)
Sort int 文章排序
Content text 文章正文
categoryId int 分類ID
3. 文章評論錶(blog_comment)
文章評論錶設計如錶12-3所示。
錶12-3
字段名稱 字段類型 說明
commentId int 主鍵,自增
nickname varchar(20) 昵稱
createdAt int(11) 評論時間
createdIp varchar(15) 評論IP(隻考慮IPV4)
content text 評論內容
articleId int 文章ID
4. 管理員錶(blog_admin)
管理員錶設計如錶12-4所示。
錶12-4
字段名稱 字段類型 說明
adminId int 管理員ID
username varchar(20) 用戶名
password char(32) 密碼(md5加密後密文)
createdAt int 賬號添加時間
loginAt int *近登錄時間
loginIp int *近登錄IP
5. 友情鏈接錶(blog_link)
友情鏈接錶設計如錶12-5所示。
錶12-5
字段名稱 字段類型 說明
linkId int 主鍵,自增
name varchar(20) 網站名稱
link varchar(100) 鏈接地址
status tinyint(1) 狀態
sort int 排序
12.6 模塊設計
12.6.1 Admin模塊
admin為後颱管理模塊,需要管理文章、分類、評論、友情鏈接等功能。所以根據功能應該分開4個Controller進行處理。Controller如下:
? ArticleController,文章控製器。
? CategoryController,分類控製器。
? CommentController,評論控製器。
? LinkController,友情鏈接控製器。
1. 權限檢測
由於admin模塊屬於受保護的模塊,所以以上4個控製器必須登錄後纔能正常訪問,為瞭不寫重復代碼,需要新建一個控製器處理登錄檢測,以上4個控製器繼承該基本控製器實現統一權限檢測。
在Admin模塊新建BaseController.class.php,添加_initialize方法,代碼如下:
protected function _initialize()
{
if (session('admin.adminId') === null)
{
$this->error('請登錄', U('admin/index/login'));
}
C('LAYOUT_NAME', 'admin');
}
需要進行權限檢測的控製器繼承BaseController即可。
2. 分頁處理
由於該博客係統是一直在綫上運行的,所以數據量不可預測,在列錶頁需要進行分頁處理。以下是友情鏈接主頁的分頁代碼:
public function index()
{
$model = new Model('Link');
$count = $model->count();
$page = new Page($count);
$show = $page->show();
$list = $model->order('linkId DESC')->limit($page->firstRow . ',' . $page->listRows)->select();
$this->assign('list', $list);
$this->assign('page', $show);
$this->display();
}
3. 文章-分類模型
文章是屬於分類的,所以讀取文章列錶的時候需要將分類信息同時查詢處理,這裏使用ThinkPHP提供的ViewModel,在Common模塊新建Model文件夾,在Model文件夾下新建ArticleCategoryViewModel.class.php,代碼如下:
namespace CommonModel;
use ThinkModelViewModel;
class ArticleCategoryViewModel extends ViewModel
{
public $viewFields = array(
'Article' => array('articleId', 'title', 'description', 'image', 'hits', 'createdAt', 'updateAt', 'status', 'sort', 'content'),
'Category' => array('categoryId', 'name', '_on' => 'Article.categoryId=Category.categoryId')
);
}
ViewModel的知識可以在第5章第9節查看。
4. 文件上傳
在設計文章錶的時候,有個封麵字段,這個字段是用來保存文章封麵的,所以需要做一個圖片上傳的功能。為瞭貫徹“模塊化”的思想,筆者特地將上傳模塊抽象齣來,隻要在需要上傳的頁麵include即可。
在Admin模塊的View文件夾添加Common文件夾,在Common文件夾下添加upload.html,代碼如下:
點擊上傳
該段代碼與一般代碼區彆不大,但是重點在於:
uploadCallback && uploadCallback(data.url);
如果當前頁麵定義瞭uploadCallback函數,則將上傳後的結果迴調到該函數。
上傳代碼,編輯Admin模塊下的Index控製器,添加upload方法,代碼如下:
public function upload()
{
$upload = new Upload();// 實例化上傳類
$upload->maxSize = 1024 * 1024 * 2;// 設置附件上傳大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 設置附件上傳類型
$upload->rootPath = __DIR__ . '/../../../upload/'; // 設置附件上傳根目錄
$upload->savePath = ''; // 設置附件上傳(子)目錄
// 上傳文件
$info = $upload->upload();
if (!$info)
{
ThinkPHP實戰 下載 mobi epub pdf txt 電子書