本篇內容會全方面通過實例的方式講一下TP6里面驗證碼的各種使用方法
一、安裝驗證碼擴展包
composer require topthink/think-captcha
二、開啟Session
找到app/middleware.php 文件,找到下面一行,並取消前面的注釋
\think\middleware\SessionInit::class
三、因為要用到模板,需要安裝下模板擴展
composer require topthink/think-view
四、TP6內置驗證碼生成以及驗證
html代碼:
<h3>內置驗證碼生成以及驗證:</h3> <div>{:captcha_img()}</div> <form action="/index.php/test_session/verify01" method="post"> <p>請輸入驗證碼: <input type="text" name="yzm" /> </p> <p><input type="submit" value="提交"></p> </form>
html效果:
控制器代碼:
1 /** 2 * TP6內置驗證碼生成以及驗證 3 */ 4 public function show01() 5 { 6 return view("test/show01"); 7 } 8 /** 9 * TP6內置驗證碼生成以及驗證 10 */ 11 public function verify01() 12 { 13 $data = request()->param(); 14 15 if (empty($data['yzm'])) 16 { 17 return json(array('status'=>'FAIL','msg'=>'請輸入驗證碼!')); 18 } 19 //調用內置的函數手動驗證 20 if(!captcha_check($data['yzm'])){ 21 return json(array('status'=>'FAIL','msg'=>'驗證失敗!')); 22 }else{ 23 return json(array('status'=>'FAIL','msg'=>'驗證成功!')); 24 } 25 }
五、自定義驗證碼 生成以及驗證
HTML代碼:
<h3>自定義驗證碼生成以及驗證:</h3> <div><img src="/index.php/test_session/createYzm" onclick="this.src='/index.php/test_session/createYzm?r='+Math.random()"></div> <form action="/index.php/test_session/verify02" method="post"> <p>請輸入驗證碼: <input type="text" name="yzm" /> </p> <p><input type="submit" value="提交"></p> </form>
控制器代碼:
控制器文件頂部引入 Captcha 類use think\captcha\facade\Captcha;
1 /** 2 * 創建驗證碼 3 */ 4 public function createYzm() 5 { 6 return Captcha::create(); 7 } 8 /** 9 * 自定義驗證碼 生成以及驗證 模板 10 */ 11 public function show02() 12 { 13 return view("test/show02"); 14 } 15 16 /** 17 * 自定義驗證碼 生成以及驗證 18 */ 19 public function verify02() 20 { 21 $data = request()->param(); 22 23 if (empty($data['yzm'])) 24 { 25 return json(array('status'=>'FAIL','msg'=>'請輸入驗證碼!')); 26 } 27 //調用內置的函數手動驗證 28 if(!captcha_check($data['yzm'])){ 29 return json(array('status'=>'FAIL','msg'=>'驗證失敗!')); 30 }else{ 31 return json(array('status'=>'FAIL','msg'=>'驗證成功!')); 32 } 33 }
對比說明:
使用自定義的更加靈活一些,可以搭配各種樣式,
使用內置的是方便一點點。
我是推薦使用自定義的驗證碼,這樣代碼的來龍去脈比較清晰,有問題也方便排錯。
六、驗證碼常用的配置
配置文件:config/captcha.php
常用到的配置有以下幾個:
1 //驗證碼位數 2 'length' => 5, 3 // 驗證碼字符集合 4 'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY', 5 // 是否使用混淆曲線 6 'useCurve' => true, 7 //是否添加雜點 8 'useNoise' => true, 9 //背景顏色 10 'bg' => [243, 251, 254],
注意:
驗證碼的高度 和寬度不要修改,設置為0即可,不然設置的小了,會出現驗證碼顯示不全的問題。
如果需要調整大小,通過頁面的css樣式進行調整驗證碼的 width 和 height 屬性
七、生成多個不同配置的驗證碼
設置配置文件config/captcha.php:
生成不同配置的驗證碼
1 /** 2 * 創建新驗證碼 3 */ 4 public function createNewYzm() 5 { 6 //生成 verify配置的驗證碼 7 return Captcha::create('verify'); 8 //生成 my_verify的驗證碼 9 // return Captcha::create('my_verify'); 10 }
注意:
生成不同配置的驗證碼多個,最終驗證只有最新的生成的驗證碼是有效的。
並不是生成多種不同配置的驗證碼,就有多重驗證方式。