国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

模型的獲取器,修改器,自動完成和數(shù)據(jù)驗證總結(jié)

Original 2018-12-17 16:19:40 368
abstract:一.模型的獲取器: 就是在獲取模型實例數(shù)據(jù)時自動觸發(fā)的模型方法.  getFieldAttr($value,$data可選)    1.在模型文件中創(chuàng)建一個獲取器方法 對應(yīng)著一條數(shù)據(jù)的一個字段.   getData()獲取某一字段的原始數(shù)據(jù)(獲取器處理之前的)    如獲取staff表中的

一.模型的獲取器: 就是在獲取模型實例數(shù)據(jù)時自動觸發(fā)的模型方法.  getFieldAttr($value,$data可選)

    1.在模型文件中創(chuàng)建一個獲取器方法 對應(yīng)著一條數(shù)據(jù)的一個字段.   getData()獲取某一字段的原始數(shù)據(jù)(獲取器處理之前的)

    如獲取staff表中的name字段,則在模型文件Staff.php中創(chuàng)建受保護的方法 getNameAttr($value,$data可選)方法  $value為獲取字段的值 $data為這條查詢數(shù)據(jù)的其他字段值 ,具體操作如下

protected function getSalaryAttr($value, $data)    //當(dāng)獲取salary工資字段時自動觸發(fā)
{
    return $data['name'].'的工資是:'.($value+250);    //獲取工資字段返回的值
}
/********************************************************************************/
    //控制器中方法
    public function gain()
    {
        $res = Staff::get(2);
//        dump($res);
        echo '<hr>';
        echo $res->salary,'<br>';
        echo $res->getData('salary');  //獲取某一字段的原始值
    }

    2.也可以為獲取不存在的字段時進行設(shè)置,如下

protected function getStaffInfoAttr($value,$data)    //獲取不存在的字段staff_info
{
    //staff_info;虛擬字段
    //$value: 僅僅是一個占位符
    return '我是'.$data['name'].'今年都'.$data['age'].'歲了,工資才'.$data['salary'].'好可憐啊';
}

//控制器中方法
echo $res->staff_info,'<br>';

------------------------------------------------------------------------------------------------------------

二.模型修改器:就是在更新模型實例數(shù)據(jù)時自動觸發(fā)的模型方法.  setFieldAttr($value,$date可選)

    1.和獲取器幾乎相同,就是在更新數(shù)據(jù)時自動觸發(fā)

protected function setSalaryAttr($value,$data)      //更新salary字段時自動觸發(fā)
{
    return $value+$data['age'];                    //返回處理后的數(shù)據(jù)
}

//控制器中方法
$res = Staff::get(3);
$res->salary = '4000';
$res->save();
/********************************************************************************/

三.模型的自動完成 : 針對寫操作,當(dāng)更新,新增(刪除通過軟刪除,也屬于更新)  相當(dāng)于給字段設(shè)置默認(rèn)值

    1.設(shè)置三個繼承于think\Model類中的三個受保護的屬性 $insert [新增時設(shè)置], $update  [更新時設(shè)置],  或者$auto [更新或者新增時都設(shè)置]

protected $insert = ['sex'=>0,'salary'=>1000];  //新增

protected $update = ['sex'=>0]; //更新

protected $auto = ['sex'=>0];   //新增和更新都設(shè)置

//控制器中方法
        Staff::create(['name'=>'小滅絕','age'=>60]);
        Staff::update(['name'=>'滅絕師太','age'=>24],
            function($query){
                $query->where('staff_id = 33');
        });

    2.類型轉(zhuǎn)換:默認(rèn)字段轉(zhuǎn)為string類型輸出,可以設(shè)置$type進行設(shè)置類型轉(zhuǎn)換如:

protected $type = [
    'staff_id' => 'integer',
    'sex' => 'integer',
    'age' => 'integer',
    'salary'=> 'integer'
];

四.自動時間戳功能:可以當(dāng)進行新增和修改是自動將時間戳寫入指定的字段中

    可以在database.php中進行修改 'auto_timestamp'  => false,  這樣設(shè)置就是全局配置 不推薦這么修改 

    也可以在數(shù)據(jù)表對應(yīng)的模型文件中進行設(shè)置三個父類受保護的屬性  $autoWriteTimestamp 是否開啟自動時間戳  $createTime 創(chuàng)建文件的時間戳字段名  $updateTime 修改文件的時間戳字段名 

//開啟當(dāng)前模型的自動時間戳功能
protected $autoWriteTimestamp = true;

//設(shè)置一下用戶自定義的新增和更新時間的字段名
protected $createTime = 'create_time';
protected $updateTime = 'update_time';

五.驗證器: 就是創(chuàng)建一個驗證器類來進行驗證,驗證器類繼承于think\Validate.php  功能就是對指定數(shù)據(jù)進行數(shù)據(jù)驗證

    1.創(chuàng)建一個驗證器類,繼承于think\Validate.php ,并寫入對應(yīng)要驗證的字段的驗證規(guī)則

    2.自定義驗證錯誤信息,可以更友好的輸出錯誤信息

    如下

namespace app\validate;
use think\Validate;

class Staff extends Validate
{
    //驗證規(guī)則
    protected $rule = [
        'name' => 'require|length:4,15',
        'sex' => 'in:0,1',
        'age' => 'require|between:18,60',
        'salary'=>'require|gt:1500'
    ];

    //自定義錯誤信息
    protected $message = [
        'name.require'  => '員工姓名不能為空',
        'name.length'   => '員工姓名長度不在范圍內(nèi)(4-15字符之間)',
        'sex.in'        => '性別必須是男或女',
        'age.require'   => '年齡不能為空',
        'age.between'   => '年齡必須在18-60之間',
        'salary.require'=> '工資必須輸入',
        'salary.gt'     => '工資必須大于1500',
    ];
}

   3.控制器文件:需要引入創(chuàng)建的驗證器類;     依賴注入驗證器類,調(diào)用驗證器類check("驗證的數(shù)據(jù)")方法 來進行驗證 驗證通過返回true 失敗返回false  getError()方法返回對應(yīng)的錯誤信息

namespace app\index\controller;
use think\Controller;
use app\validate\Staff; //導(dǎo)入驗證器類

class Verify extends Controller
{
    //驗證器
    public function demo1(Staff $validate)    //依賴注入
    {
        //準(zhǔn)備一下要驗證的數(shù)據(jù)
        $data  = [
            'name'=> '羅伯特唐尼',
            'sex' => 1,
            'age' => 22,
            'salary' => 5000
        ];
//        $validate = new Staff();
        if(!$validate->check($data)){
            dump($validate->getError());
        }else{
            return '驗證通過';
        }
    }

    4.可以簡化驗證器 控制器調(diào)用父類Controller.php的方法validate($data,$rule,$message)  $data:要驗證的數(shù)據(jù),$rule:驗證規(guī)則,$message:錯誤信息 $this->validate($data,$rule)錯誤返回錯誤信息 正確返回true

public function demo2()
{
    $data = [
        'name'=> '鋼鐵俠羅伯特唐尼',
        'sex' => 1,
        'age' => 18,
        'salary' => 5000
    ];
    //驗證規(guī)則
    $rule = 'app\validate\Staff';    //驗證器類

    $res = $this->validate($data,$rule);
    if($res !== true){
        return $res;
    }else{
        return '驗證成功!';
    }
}

    5.當(dāng)想處理很簡單的驗證規(guī)則時可以直接寫入validate的參數(shù)中

$data = ['age'=>28];

$rule = ['age' => ['between:10,50','require']];

$message = ['age.between' => '年齡必須在10-50之間','age.require' => '年齡不能為空'];

$res = $this->validate($data, $rule, $message);    //直接傳入數(shù)據(jù),規(guī)則,錯誤信息

if($res !== true){
    return $res;
}else{
    return '驗證成功!';
}

六.獨立驗證:就是不依賴自定義的驗證類,直接引入使用think\Validate.php中的方法進行驗證   Validate::make($rule,$message)  創(chuàng)建驗證規(guī)則并返回驗證對象,  驗證對象->check($data)即可進行驗證

use think\Validate;
public function demo3()
{
    //1.創(chuàng)建驗證規(guī)則
    $rule = ['age'=>'require|between:20,80'];

    //2.創(chuàng)建錯誤信息
    $mess = [
        'age.require'   =>   '年齡必須填寫',
        'age.between'   =>   '年齡必須在20-80之間',
    ];
    //3.創(chuàng)建數(shù)據(jù)
    $data = ['age' => 50];

    //Validate::make():創(chuàng)建驗證規(guī)則并返回驗證對象
    $validate = Validate::make($rule,$mess);

    //4.進行驗證
    $res = $validate->check($data);

    return $res ? '驗證成功' : $validate->getError();

}




Correcting teacher:韋小寶Correction time:2018-12-17 16:27:24
Teacher's summary:寫的很不錯哦!總結(jié)的也很完整!框架中的驗證可以幫助我們快速的完整項目!

Release Notes

Popular Entries