## 验证码
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 上传文件失败
- 开发工具
- 版本更新
- 不兼容改动
- 升级指南
- 文档历史