一、问题描述
在使用 tp5.1 框架中的 验证码类 的时候,准备工作都做好了,但是验证码图片却无法显示,浏览器缓存也清掉了,电脑也重启的,图片路径也没有问题,就是不显示验证码的图片。
1)通过composer下载的验证码类的文件目录:
2)前端涉及到的代码:
<img onclick="changeCode(this)" src="{:url('login/verify')}" alt="captcha" />
</div>
<script>
// 点击验证码刷新图片
function changeCode(obj)
{
var url = "{:url('login/verify',['random'=>"+Math.random+"])}"; //兼容低版本的浏览器
obj.src = url;
}
</script>
3)验证码类(与controller同级目录 validate/LoginValidate.php
)
namespace app\bis\validate;
use think\Validate;
/**
* 登录验证器
*/
class LoginValidate extends Validate
{
// 验证规则
protected $rule = [
"username" => "require",
"password" => "require",
"code" => "require"
];
// 提示信息
protected $message = [
"username.require" => "用户名不能为空",
"password.require" => "密码不能为空",
"code.require" => "验证码不能为空"
];
}
4)生成验证码(controller/Login.php
):
namespace app\bis\controller;
use think\Controller;
use think\captcha\Captcha;
use app\bis\validate\LoginValidate;
/**
* 商户登录
*/
class Login extends Controller
{
// 生成验证码
public function verify()
{
// 实例化验证码类
$captcha = new Captcha();
return $captcha->entry();
}
}
二、解决方法
在生成验证码类代码的前面加一行代码:
ob_clean(); // 将输出缓存清掉
完整的代码如下:
// 生成验证码
public function verify()
{
ob_clean();
// 实例化验证码类
$captcha = new Captcha();
return $captcha->entry();
}
重新刷新页面,发现验证码图片出来了。