## 驗證碼
MixPHP 的驗證碼類并沒有像其他框架一樣設計成非常耦合的方式,使用戶無法了解驗證碼實現原理,而是讓驗證碼回歸原始,只做驗證碼生成, 其他交互功能由框架組件來完成。
| 類 | 調用 |
| --- | --- |
| mix\http\Captcha | new Captcha([配置]); |
## 控制器 (輸出)
在控制器的方法中輸出驗證碼圖片,微調 `angleRand`、`xSpacing`、`yRand` 三個參數可調整文字的相對位置,驗證碼中的文字越是粘連越難以破解。
### 英文驗證碼
>[danger] `TimesNewRomanBold.TTF` 英文字體文件框架內不包含,需用戶自行下載。
~~~
public function actionIndex()
{
Response::setHeader('Content-Type', 'image/png');
$captcha = new Captcha([
'width' => 100,
'height' => 40,
'fontFile' => app()->basePath . '/fonts/TimesNewRomanBold.TTF',
'fontSize' => 20,
'wordNumber' => 4,
'angleRand' => [-20, 20],
'xSpacing' => 0.82,
'yRand' => [5, 15],
]);
$captcha->generate();
Session::set('captchaText', $captcha->getText());
return $captcha->getContent();
}
~~~
### 中文驗證碼
>[danger] `SIMLI.TTF` 中文字體文件框架內不包含,需用戶自行下載。
~~~
public function actionIndex()
{
Response::setHeader('Content-Type', 'image/png');
$captcha = new Captcha([
'width' => 100,
'height' => 40,
'fontFile' => app()->basePath . '/fonts/SIMLI.TTF',
'fontSize' => 22,
'wordSet' => '酸舊卻充秋遍鍛玉夏療尖殖井費州訪吹榮銅沿替滾客召旱悟刺腦措貫藏敢令隙爐殼硫煤迎鑄粘探臨薄旬善福縱擇禮愿伏殘雷延煙句純漸耕跑澤慢栽魯赤繁境潮橫掉錐希池敗船假亮謂托伙哲懷割擺貢呈勁財儀沉煉麻罪祖息車穿貨銷齊鼠抽畫飼龍庫守筑房歌寒喜哥洗蝕廢納腹乎錄鏡婦惡脂莊擦險贊鐘搖典柄辯竹谷賣亂虛橋奧伯趕垂途額壁網截野遺靜謀弄掛課鎮妄盛耐援扎慮鍵歸符慶聚繞摩忙舞遇索顧膠羊湖釘仁音跡碎伸燈避泛亡答勇頻皇柳哈揭甘諾概憲濃島襲誰洪謝炮澆斑訊懂靈蛋閉孩釋乳巨徒私銀伊景坦累勻霉杜樂勒隔彎績招紹胡呼痛峰零柴簧午跳居尚丁秦稍追梁折耗堿殊崗挖氏刃凸役剪川雪鏈漁啦臉戶洛孢勃盟買楊宗焦賽旗濾硅缸夾念蘭映溝乙嗎儒殺汽磷艱晶插埃燃歡鐵補咱芽永瓦傾陣碳演威附牙芽永瓦斜灌歐獻順豬洋腐請透司危括脈宜笑若尾束壯暴企菜穗楚漢愈綠拖牛份染穩奪硬價努翻奇甲預職評讀泥辟告卵箱掌氧恩愛停曾溶營終綱孟錢待盡俄縮沙退陳討炭股坐蒸凝竟陷槍黎救冒暗洞犯筒您宋淡允叛畜俘摸銹掃畢璃寶芯爺鑒秘凈蔣鈣肩騰枯拋軌堂拌爸循誘祝勵肯酒繩窮塘燥泡袋朗喂鋁軟渠顆慣貿糞綜墻趨彼屆墨礙啟逆卸航衣孫齡嶺騙休借們以我到他會作時要動國產的一是工就年階義發成部民可出能方進在了不和有餓',
'wordNumber' => 3,
'angleRand' => [-20, 20],
'xSpacing' => 0.85,
'yRand' => [5, 10],
]);
$captcha->generate();
Session::set('captchaText', $captcha->getText());
return $captcha->getContent();
}
~~~
## 視圖 (引用)
在視圖中使用 `img` 標簽,在 `src` 屬性中指向驗證碼控制器方法的 URL 地址。
~~~
<img src="/captcha" height=38>
~~~
## 驗證器 (驗證)
用戶提交驗證碼后需要在驗證器中驗證,使用驗證規則 `call` 來自定義驗證。
1. 首先定義規則、場景、消息。
~~~
// 規則
public function rules()
{
return [
'captcha' => ['call', 'callback' => [$this, 'captchaCheck']],
];
}
// 場景
public function scenarios()
{
return [
'index' => ['required' => ['captcha']],
];
}
// 消息
public function messages()
{
return [
'captcha' => '驗證碼不正確.',
];
}
~~~
2. 增加 `captchaCheck` 方法
~~~
public function captchaCheck($attributeValue)
{
$captchaText = Session::get('captchaText');
if (strcasecmp($attributeValue, $captchaText) == 0) {
return true;
}
return false;
}
~~~
- 歡迎使用 MixPHP
- 安裝說明
- 常規安裝
- 只安裝命令行
- Apache/PHP-FPM安裝
- 開發與調試
- 開發注意事項
- 調試與錯誤
- 基礎架構
- 目錄結構
- 目錄設計
- URL訪問
- 命名空間
- 自動加載
- 入口文件
- 框架核心
- Application
- 配置
- 對象
- 組件
- 門面
- 系統服務
- 中間件
- 驗證器
- 驗證器定義
- 驗證規則
- 靜態調用
- 模型
- 日志
- 命令行
- 簡介
- 命令行開發常識
- 創建命令
- 執行與選項
- 控制臺程序
- 守護程序
- HTTP 服務
- 簡介
- 服務器
- 路由
- 請求
- 響應
- 控制器
- 視圖
- Token
- Session
- Cookie
- 文件上傳
- 圖片處理
- 分頁
- 驗證碼
- WebSocket 服務
- 簡介
- 回調函數
- 消息處理器
- 客戶端測試
- nginx代理
- 60s無消息斷線
- 多進程
- ProcessPoolTaskExecutor
- 流水線模式
- 推送模式
- 在 Supervisor 中使用
- 協程
- 簡介
- 如何開啟協程
- HTTP 協程開發
- 命令行協程開發
- 客戶端
- MySQL
- PDO
- PDOPersistent
- PDOMasterSlave
- PDOCoroutine
- Redis
- Redis
- RedisPersistent
- RedisCoroutine
- 外部工具庫
- 簡介
- think-orm
- psr-log
- 安全建議
- 常見問題
- 啟動多個 HTTP 服務器
- 連接多個數據庫
- 如何設置跨域
- mix-httpd service stop 無效
- No such file or directory
- 錯誤級別配置不生效
- 推進計劃
- 文檔歷史