[TOC]
* * * * *
## 1 更新簡介
### 1-1 驗證類Validate
添加驗證類\library\think\Validate.php
### 1-2 助手函數helper.php
助手文件helper.php有關單字母函數名稱修改
### 1-3 Db驅動Db\
數據庫驅動\library\think\Db\ 進行重構
### 1-4 其他更新小結
模板后綴更新等
## 2 驗證類
###2-1 驗證類簡介
>[info] 驗證類的實現在\library\think\Validate.php
>[info] 驗證類用來對輸入數據進行驗證,
>[info] 使用I方法獲取數據庫,創建驗證類對象,對數據進行規則驗證
使用方法見 [官方文檔](http://www.hmoore.net/manual/thinkphp5/129352)
具體使用時,將其中的$data換成I方法獲取的輸入數據即可
###2-2 使用方法
>[info] 1 創建驗證類Validate的對象,對數據進行驗證
~~~
; 創建Validate對象,對輸入數據進行驗證。將$data替換為I()方法獲取的輸入數據
$validate = new Validate([
'name'=>'require|max:25',
'email'=>'email'
]);
$data = [
'name'=>'thinkphp',
'email'=>'thinkphp@qq.com'
];
if(!$validate->check($data)){
dump($validate->getError());
}
~~~
>[info] 2 模型中使用驗證
~~~
;實例:模型調用validate()方法進行輸入數據驗證
$User = M('User');
$data = $User->validate(
[
'name' => 'require|max:25',
'email' => 'email',
],
[
'name.require' => '名稱必須',
'name.max' => '名稱最多不能超過25個字符',
'email' => '郵箱格式錯誤',
]
)->create($data);
if(!$data){
// 驗證失敗 輸出錯誤信息
dump($User->getError());
}
~~~
>[info] 3 繼承think\Controller類 調用validate()方法
~~~
;實例 在具體控制器中調用validate()方法
$result = $this->validate(
[
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com',
],
[
'name' => 'require|max:25',
'email' => 'email',
]);
if(true !=== $result){
// 驗證失敗 輸出錯誤信息
dump($result);
}
~~~
>[info] 4 在模型或控制器中調用驗證類
~~~
;定義驗證類
namespace app\index\validate;
use think\Validate;
class User extends Validate
{
protected $rule = [
'name' => 'require|max:25',
'email' => 'email',
];
protected $message = [
'name.require' => '用戶名必須',
'email' => '郵箱格式錯誤',
];
protected $scene = [
'add' => ['name,'email'],
'edit' => ['email'],
];
}
;調用同名稱驗證類與模型進行驗證
$User = M('User');
$data = $User->validate(true)->create($data);
if(!$data){
dump($User->getError());
}
;調用不同名稱類與模型進行驗證
$User = M('User');
$data = $User->validate('Member')->create($data);
if(!$data){
dump($User->getError());
}
;模型中場景使用
$User = M('User');
$data = $User->validate('User.edit')->create($data);
if(!$data){
dump($User->getError());
}
;控制器調用驗證類型進行驗證
$result = $this->validate($data,'User');
if(true !=== $result){
dump($result);
}
;控制器使用場景調用驗證類
$result = $this->validate($data,'User.edit');
if(true !=== $result){
dump($result);
}
~~~
###2-3 源代碼分析(Validate.php)
>[info] 成員變量
~~~
;驗證器實例對象,單一實例實現
protected static $instance = null;
;驗證方法類型,方法別名
protected static $type = [];
protected $alias = [
'>' => 'gt', '>=' => 'egt', '<' => 'lt', '<=' => 'elt', '=' => 'eq', 'same' => 'eq',
];
;驗證規則,驗證提示信息,默認驗證方法提示信息
protected $rule = [];
protected $message = [];
protected static $typeMsg
;當前驗證場景,正則規則,場景規則,錯誤信息,是否批量驗證
protected $currentScene
protected $regex = [];
protected $scene = [];
protected $error = [];
protected $batch = false;
~~~
>[info] public 成員方法(驗證接口調用)
* * * * *
#### 構造函數 __construct()
~~~
public function __construct(array $rules = [], $message = [])
~~~
> $ruls:驗證規則 字段的驗證方法
> $message:提示信息 驗證報錯提示語
~~~
;實例 $rule定義,$msg定義。使用時將$data換成I()方法獲取的輸入數據即可
$rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email',
];
$msg = [
'name.require' => '名稱必須',
'name.max' => '名稱最多不能超過25個字符',
'age.number' => '年齡必須是數字',
'age.between' => '年齡必須在1~120之間',
'email' => '郵箱格式錯誤',
];
$data = [
'name' => 'thinkphp',
'age' => 121,
'email' => 'thinkphp@qq.com',
];
$validate = new Validate($rule,$msg);
$result = $validate->check($data);
if(!$result){
echo $validate->getError();
}
~~~
#### 實例化驗證器 make()
~~~
public static function make($rules = [], $message = [])
~~~
> $ruls:驗證規則 字段的驗證方法
> $message:提示信息 驗證報錯提示語
> 說明:將Validate作為靜態類使用創建驗證實例對象,
#### 添加字段驗證規則 rule()
~~~
public function rule($name, $rule = '')
~~~
> $name:驗證的字段名稱
> $rule:字段驗證規則
~~~
;實例:使用rule()方法添加對zip字段的驗證規則
$rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
];
$validate = new \Validate($rule);
$validate->rule('zip', '/^\d{6}$/');
$validate->rule([
'email' => 'email',
]);
~~~
#### 添加驗證方法實現 extend()
~~~
public static function extend($type, $callback = null)
~~~
> $type :字段驗證規則
> $callback: 驗證規則回調方法
~~~
實例:使用extend()添加驗證規則方法
$validate = new Validate(['name' => 'checkName:1']);
$validate->extend('checkName', function ($value, $rule) {
return $rule == $value ? true : '名稱錯誤';
});
$data = ['name' => 1];
$result = $validate->check($data);
~~~
~~~
實例:使用extend()添加多個驗證規則方法
$validate = new Validate(['name' => 'checkName:1']);
$validate->extend([
'checkName'=> function ($value, $rule) {
return $rule == $value ? true : '名稱錯誤';
},
'checkStatus'=> [$this,'checkStatus']
]);
$data = ['name' => 1];
$result = $validate->check($data);
~~~
#### 設置驗證方法提示語 setTypeMsg()
~~~
public static function setTypeMsg($type, $msg = null)
~~~
> $type:驗證規則類型
> $msg :提示語
~~~
實例:使用setTypeMsg()添加驗證規則類型提示語
$rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email',
];
$msg = [
'name.require' => '名稱必須',
'name.max' => '名稱最多不能超過25個字符',
'age.number' => '年齡必須是數字',
'age.between' => '年齡必須在1~120之間',
'email' => '郵箱格式錯誤',
];
$data = [
'name' => 'thinkphp',
'age' => 121,
'email' => 'thinkphp@qq.com',
];
$validate = new Validate($rule);
$validate = $validate->setTypeMsg($msg);
$result = $validate->check($data);
if(!$result){
echo $validate->getError();
}
~~~
#### 設置字段提示信息 message()
~~~
public function message($name, $message = '')
~~~
> $name:字段名稱
> $message:提示信息
#### 設置驗證場景 scene()
~~~
public function scene($name, $fields = null)
~~~
> $name:驗證場景
> $fields: 當前場景驗證字段
~~~
;實例:使用scene()定義場景下特定字段的驗證
;edit場景下只驗證name和age字段
$rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email',
];
$msg = [
'name.require' => '名稱必須',
'name.max' => '名稱最多不能超過25個字符',
'age.number' => '年齡必須是數字',
'age.between' => '年齡只能在1-120之間',
'email' => '郵箱格式錯誤',
];
$data = [
'name' => 'thinkphp',
'age' => 10,
'email' => 'thinkphp@qq.com',
];
$validate = new Validate($rule);
$validate->scene('edit', ['name', 'age']);
$result = $validate->scene('edit')->check($data);
~~~
#### 設置批量驗證 batch()
~~~
public function batch($batch = true)
~~~
> $bacth:開啟與關閉批量驗證
#### 開始驗證數據 check()
~~~
public function check(&$data, $rules = [], $scene = '')
~~~
> $data 需要檢測的數據
> $rules: 驗證使用的規則,默認使用當前類型的規則屬性
> $scene: 驗證的場景, 默認使用scene()設置的場景屬性
~~~
;使用check()對$data數據進行驗證
$validate = new Validate([
'name'=>'require|max:25',
'email'=>'email'
]);
$data = [
'name'=>'thinkphp',
'email'=>'thinkphp@qq.com'
];
if(!$validate->check($data)){
dump($validate->getError());
}
~~~
#### 獲取錯誤提示信息 getError()
~~~
public function getError()
~~~
>[info] protected成員方法(內部實現機制)
~~~
;對單個字段進行驗證
protected function checkItem($field, $value, $rules, &$data, $title = '', $msg = [])
;驗證token令牌
protected function token($value, $rule, $data)
;各種驗證規范實現回調 返回布爾類型值
protected function confirm($value, $rule, $data)
protected function egt($value, $rule)
protected function gt($value, $rule)
protected function elt($value, $rule)
protected function lt($value, $rule)
protected function eq($value, $rule)
protected function is($value, $rule)
protected function activeUrl($value, $rule)
protected function ip($value, $rule)
protected function method($value, $rule)
protected function dateFormat($value, $rule)
protected function unique($value, $rule, $data, $field)
protected function behavior($value, $rule, $data)
protected function filter($value, $rule)
protected function requireIf($value, $rule, $data)
protected function requireCallback($value, $rule, $data)
protected function requireWith($value, $rule, $data)
protected function in($value, $rule)
protected function notIn($value, $rule)
protected function between($value, $rule)
protected function notBetween($value, $rule)
protected function length($value, $rule)
protected function max($value, $rule)
protected function min($value, $rule)
protected function after($value, $rule)
protected function before($value, $rule)
protected function expire($value, $rule)
protected function allowIp($value, $rule)
protected function denyIp($value, $rule)
protected function regex($value, $rule)
;獲取字段子,獲取驗證規則提示信息,獲取驗證場景
protected function getDataValue($data, $key)
protected function getRuleMsg($attribute, $title, $type, $rule)
protected function getScene($scene = '')
~~~
## 3 助手函數
###3-1 助手函數修改簡介
>[info] 助手函數改用use導入相關類
>[info] 助手函數有關方法名稱發生變動
###3-2 方法名稱改動
~~~
M() 改為 model()
U() 改為 url()
R() 改為 action()
S() 改為 cache()
V() 改為 view()
添加 controller() 方法 實例化控制器
添加 route() 方法 注冊路由規則
~~~
## 5 其他修改
###5-1 模板后綴
模板后綴修改為.php
- 更新記錄
- 概述
- 文件索引
- 函數索引
- 章節格式
- 框架流程
- 前:章節說明
- 主:(index.php)入口
- 主:(start.php)框架引導
- 主:(App.php)應用啟動
- 主:(App.php)應用調度
- C:(Controller.php)應用控制器
- M:(Model.php)數據模型
- V:(View.php)視圖對象
- 附:(App.php)應用啟動
- 附:(base.php)全局變量
- 附:(common.php)模式配置
- 附:(convention.php)全局配置
- 附:(Loader.php)自動加載器
- 附:(Build.php)自動生成
- 附:(Hook.php)監聽回調
- 附:(Route.php)全局路由
- 附:(Response.php)數據輸出
- 附:(Log.php)日志記錄
- 附:(Exception.php)異常處理
- 框架工具
- 另:(helper.php)輔助函數
- 另:(Cache.php)數據緩存
- 另:(Cookie.php)cookie操作
- 另:(Console.php)控制臺
- 另:(Debug.php)開發調試
- 另:(Error.php)錯誤處理
- 另:(Url.php)Url操作文件
- 另:(Loader.php)加載器實例化
- 另:(Input.php)數據輸入
- 另:(Lang.php)語言包管理
- 另:(ORM.php)ORM基類
- 另:(Process.php)進程管理
- 另:(Session.php)session操作
- 另:(Template.php)模板解析
- 框架驅動
- D:(\config)配置解析
- D:(\controller)控制器擴展
- D:(\model)模型擴展
- D:(\db)數據庫驅動
- D:(\view)模板解析
- D:(\template)模板標簽庫
- D:(\session)session驅動
- D:(\cache)緩存驅動
- D:(\console)控制臺
- D:(\process)進程擴展
- T:(\traits)Trait目錄
- D:(\exception)異常實現
- D:(\log)日志驅動
- 使用范例
- 服務器與框架的安裝
- 控制器操作
- 數據模型操作
- 視圖渲染控制
- MVC開發初探
- 模塊開發
- 入口文件定義全局變量
- 運行模式開發
- 框架配置
- 自動生成應用
- 事件與插件注冊
- 路由規則注冊
- 輸出控制
- 多種應用組織
- 綜合應用
- tp框架整合后臺auto架構快速開發
- 基礎原理
- php默認全局變量
- php的魔術方法
- php命名空間
- php的自動加載
- php的composer
- php的反射
- php的trait機制
- php設計模式
- php的系統時區
- php的異常錯誤
- php的輸出控制
- php的正則表達式
- php的閉包函數
- php的會話控制
- php的接口
- php的PDO
- php的字符串操作
- php的curl
- 框架心得
- 心:整體結構
- 心:配置詳解
- 心:加載器詳解
- 心:輸入輸出詳解
- 心:url路由詳解
- 心:模板詳解
- 心:模型詳解
- 心:日志詳解
- 心:緩存詳解
- 心:控制臺詳解
- 框架更新
- 4.20(驗證類,助手函數)
- 4.27(新模型Model功能)
- 5.4(新數據庫驅動)
- 7.28(自動加載)