在 ThinkPHP 開發中,分頁與驗證碼是兩項基礎且高頻使用的功能。本文將透過實際程式碼範例,詳細說明如何建立通用的驗證碼驗證機制,以及如何運用內建的 Page 類別實現靈活的分頁顯示。
為了讓多個 Controller 共用驗證碼邏輯,我們可以建立一個 CommonAction 基類,讓其他 Action 繼承它。核心在於 verify() 方法:
<?php
class CommonAction extends Action {
public function verify() {
// 匯入驗證碼類別
import('ORG.Util.Image');
// 產生驗證碼圖片
// 參數:長度、模式(5=混合)、格式、寬、高
Image::buildImageVerify(5, 5, 'png', 80, 22);
/* 中文驗證碼擴充 (ThinkPHP 2.0 需修正 msubstr 函數並放入字體檔)
Image::GBVerify();
*/
}
}
?>
關鍵參數說明:
$length:驗證碼位數$mode:類型 (0:字母, 1:數字, 2:大寫, 3:小寫, 4:中文, 5:混合)$type:圖片格式$width/$height:圖片尺寸繼承 CommonAction 的 PageAction 展示如何使用 ORG.Util.Page 類別:
<?php
class PageAction extends CommonAction {
public function index() {
import('ORG.Util.Page');
$user = M('User');
$count = $user->count(); // 總筆數
// 實例化分頁類別:每頁 3 筆
$page = new Page($count, 3);
// 自訂分頁文字
$page->setConfig('header', '筆會員');
$page->setConfig('prev', '上一組');
$page->setConfig('next', '下一組');
$page->setConfig('first', '首頁');
$page->setConfig('last', '尾頁');
// 取得分頁顯示字串
$show = $page->show();
// 依分頁參數查詢資料
$list = $user->order('id desc')
->limit($page->firstRow . ',' . $page->listRows)
->select();
// 指派給模板
$this->assign('title', '分頁演示');
$this->assign('alist', $list);
$this->assign('page', $show);
$this->display();
}
// 驗證碼檢查
function check() {
$verify = $_SESSION['verify'];
if ($verify != md5($_POST['verify'])) {
$this->error('驗證碼錯誤');
}
}
}
?>
模板檔案結合表單提交、驗證碼點擊更換、分頁列表輸出:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ThinkPHP 分頁與驗證碼演示</title>
</head>
<body>
<form action="__URL__/check" method="post">
驗證碼:<input type="text" name="verify"/>
<img onclick="show(this)" src="__APP__/common/verify"/><br/>
<input type="submit" value="提交"/>
</form>
<!-- 列表輸出 -->
<volist name="alist" id="vo">
<li>
<span>ID</span>{$vo.id}
<span>用戶名</span>{$vo.username}
<span>IP</span>{$vo.createip}
</li>
</volist>
<!-- 分頁顯示 -->
{$page}
<script>
function show(obj) {
obj.src = "__APP__/common/verify?" + Math.random();
}
</script>
</body>
</html>
CommonAction,子類別自動擁有 verify() 功能。firstRow/listRows 進行 limit 查詢。onclick 事件,附加隨機參數防止快取,使用者點擊即可換碼。掌握這兩項技巧,即可快速構建具備良好使用者體驗的後台管理或前台列表頁面。