常用登陸驗證-後端BaseController.php
阿新 • • 發佈:2022-04-13
1 <?php 2 declare (strict_types = 1); 3 4 namespace app\admin; 5 6 use think\App; 7 use think\exception\ValidateException; 8 use think\Validate; 9 10 /** 11 * 控制器基礎類 12 */ 13 abstract class BaseController 14 { 15 /** 16 * Request例項 17 * @var \think\Request 18 */ 19 protected$request; 20 21 /** 22 * 應用例項 23 * @var \think\App 24 */ 25 protected $app; 26 27 /** 28 * 是否批量驗證 29 * @var bool 30 */ 31 protected $batchValidate = false; 32 33 /** 34 * 控制器中介軟體 35 * @var array 36 */ 37 protected $middleware = []; 38 39/** 40 * 構造方法 41 * @access public 42 * @param App $app 應用物件 43 */ 44 public function __construct(App $app) 45 { 46 $this->app = $app; 47 $this->request = $this->app->request; 48 49 // 控制器初始化 50 $this->initialize(); 51 }52 53 // 初始化 54 protected function initialize() 55 {} 56 57 /** 58 * 驗證資料 59 * @access protected 60 * @param array $data 資料 61 * @param string|array $validate 驗證器名或者驗證規則陣列 62 * @param array $message 提示資訊 63 * @param bool $batch 是否批量驗證 64 * @return array|string|true 65 * @throws ValidateException 66 */ 67 protected function validate(array $data, $validate, array $message = [], bool $batch = false) 68 { 69 if (is_array($validate)) { 70 $v = new Validate(); 71 $v->rule($validate); 72 } else { 73 if (strpos($validate, '.')) { 74 // 支援場景 75 [$validate, $scene] = explode('.', $validate); 76 } 77 $class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate); 78 $v = new $class(); 79 if (!empty($scene)) { 80 $v->scene($scene); 81 } 82 } 83 84 $v->message($message); 85 86 // 是否批量驗證 87 if ($batch || $this->batchValidate) { 88 $v->batch(true); 89 } 90 91 return $v->failException(true)->check($data); 92 } 93 }