## 驗證碼
MixPHP 的驗證碼類并沒有像其他框架一樣設計成非常耦合的方式,使用戶無法了解驗證碼實現原理,而是讓驗證碼回歸原始,只做驗證碼生成, 其他交互功能由框架組件來完成。
| 類 | 調用 |
| --- | --- |
| Mix\Captcha\CaptchaBuilder | new CaptchaBuilder([配置]); |
## 安裝
```
composer require mix/captcha
```
>[danger] 該類默認代碼未包含, 需自行安裝。
## 控制器 (輸出)
在控制器的方法中輸出驗證碼圖片,微調 `angleRand`、`xSpacing`、`yRand` 三個參數可調整文字的相對位置,驗證碼中的文字越是粘連越難以破解。
### 英文驗證碼
>[danger] `TimesNewRomanBold.TTF` 英文字體文件框架內不包含,需用戶自行下載。
~~~
public function actionIndex()
{
app()->response->setHeader('Content-Type', 'image/png');
$captcha = new CaptchaBuilder([
'width' => 100,
'height' => 40,
'fontFile' => app()->basePath . '/fonts/TimesNewRomanBold.TTF',
'fontSize' => 20,
'wordNumber' => 4,
'angleRand' => [-20, 20],
'xSpacing' => 0.82,
'yRand' => [5, 15],
]);
$captcha->build();
app()->session->set('captchaText', $captcha->getText());
return $captcha->getContent();
}
~~~
### 中文驗證碼
>[danger] `SIMLI.TTF` 中文字體文件框架內不包含,需用戶自行下載。
~~~
public function actionIndex()
{
app()->response->setHeader('Content-Type', 'image/png');
$captcha = new CaptchaBuilder([
'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->build();
app()->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 = app()->session->get('captchaText');
if (empty($captchaText)) {
return false;
}
if (strcasecmp($attributeValue, $captchaText) == 0) {
return true;
}
return false;
}
~~~
- 歡迎使用 MixPHP
- 安裝說明
- 全量安裝
- Phar 命令行
- 入門須知
- 增改應用
- 命名空間
- 自動加載
- 入口文件
- 配置文件
- 服務開發
- 核心基礎
- Bean
- Component
- Application
- 命令行
- 簡介
- 命令行開發常識
- 命令行開發
- 創建命令
- 命令參數
- 打印與顏色
- 控制臺程序
- 守護程序
- HTTP 服務
- 簡介
- 服務器
- 路由
- 請求
- 響應
- 控制器
- 視圖
- Auth
- Session
- 文件上傳
- 其他組件
- 分頁
- 驗證碼
- 圖片處理
- 客戶端
- GuzzleHttp
- 雜項
- Apache/PHP-FPM部署
- 調試與錯誤
- 安全建議
- WebSocket 服務
- 簡介
- 服務器
- 注冊器
- 連接
- 客戶端
- 測試
- 雜項
- nginx代理
- 60s無消息斷線
- TCP 服務
- 簡介
- 服務器
- 客戶端
- 測試
- UDP 服務
- 簡介
- 服務器
- 客戶端
- 測試
- 協程
- 簡介
- 開啟協程
- PHP Stream Hook
- xgo + Channel
- WaitGroup + xdefer
- 連接池
- 協程池
- 定時器
- 公共組件
- 中間件
- 驗證器
- 驗證器定義
- 驗證規則
- 靜態調用
- 模型
- 日志
- 緩存
- 數據庫
- Database
- QueryBuilder
- PDOConnection
- Persistent\PDOConnection
- Coroutine\PDOConnection
- MasterSlave\PDOConnection
- ExecuteListener
- Redis
- RedisConnection
- Persistent\RedisConnection
- Coroutine\RedisConnection
- ExecuteListener
- 常見問題
- 同一臺服務器部署多個服務
- 連接多個數據庫
- 如何設置跨域
- form-data 上傳文件失敗
- 開發工具
- 版本更新
- 不兼容改動
- 升級指南
- 文檔歷史