模型获取器修改器验证器

原创2018-12-24 10:51:15127
摘要:model<?php namespace app\index\model; use think\Model; //使用软删除功能,必须先导入model/concern/SoftDelete.php use think\model\concern\SoftDelete;    //一个trait方法集 class&nbs

model

<?php

namespace app\index\model;

use think\Model;
//使用软删除功能,必须先导入model/concern/SoftDelete.php
use think\model\concern\SoftDelete;    //一个trait方法集
class Staff extends Model
{
    use SoftDelete;

    //设置数据表名
    protected $table = 'staff';

    //设置主键
    protected $pk = 'staff_id';

    //设置删除时间字段,配合软删除功能
    protected $deleteTime = 'delete_time';

    //设置软删除字段的默认值
    protected $defaultSoftDelete = 0;

    //获取器1: sex字段,仅限模型内部调用,不能是public
    protected function getSexAttr($value)
    {   $sex = [0=>'男', 1=>'女'];
        return $sex[$value];
    }

    //获取器2: 可传入所有字段的值,用来更加完整的描述用户字段信息
    protected function getSalaryAttr($value, $data)
    {
        return $data['name'].'的工资是:'.($value+200);  //生成用户订单是常用
    }
    
    //获取器3: 可以为表中不存在的字段设置获取器方法,纯粹拼装字段内容
    protected function getStaffInfoAttr($value, $data)
    {
        //其实$value此时仅是一个占位符,可任意命名,无任何意义
        return '我是'.$data['name'].'今年都.'.$data['age'].'岁了,工资才'.$data['salary'].',好可怜呀~~';
    }

    //修改器1:将入职时间自动转为时间戳存储
    protected function setEntryTimeAttr($value)
    {
        return strtotime($value);
    }
    //修改器2:也支持传入第二个参数,引用其它字段的值
    protected function setSalaryAttr($value, $data)
    {   
        //salary字段存入表中时,自动加上员工的年龄,纯粹演示,无实际意义
        return $value+$data['age']; 
    }

    //开启当前模型的自动时间戳功能
    protected $autoWriteTimestamp = true;
    //设置支持自动时间戳功能的字段名
    protected $createTime = 'create_time';
    protected $updateTime = 'update_time';


    //类型转换
    protected $type = [
        'staff_id'    =>  'integer',
        'sex'     =>  'integer',
        'age'  =>  'interger',
        'salary'      =>  'interger',
    ];

    //自动完成
    protected $insert = ['sex' => 0,'salary'=> 1000]; //新增时
    protected $update = ['sex'=> 0];
    // protected $auto = ['sex'=>0];
}

//controller--获取器,修改器,自动完成

<?php 
namespace app\index\controller;
use think\Controller;
use app\index\model\Staff;
class ModelEdu extends Controller
{
    //获取器
    public function gain()
    {
        $res = Staff::get(2);  //实例并初始化Staff模型
        \var_dump($res);  //查看所有字段信息
        echo $res->sex, '<br>';  //查看经过修改器处理后的性别字段
        echo $res->getData('sex'), '<br>'; //查看原始字段值
        echo $res->salary, '<br>'; ////查看经过修改器处理后的工资字段(为了保密加了200,非真实工资)
        echo  $res->staff_info, '<br>'; //查看一个不存在的字段信息,体验获取器的强大之处
    }

    //修改器: 先给staff表新增一个字段entry_time: 入职时间
    public function modify()
    {
        $res = Staff::get(3);
        $res->entry_time = '2015-05-22';
        // $res->save();

        $res = Staff::get(3);
        $res->salary = 7800;
        $res->save();
        return '修改成功';
    }

    //自动完成:
    public function auto()
    {
        // Staff::create(['name'=>'灭绝师太','age'=>59]);
        Staff::update(['name'=>'咩咩','age'=>18],['staff_id'=>15]);
    }
}
//验证器类
<?php
namespace app\validate;

use think\Validate;

class Staff extends Validate
{
    //验证规则
    protected $rule = [
        'name'=>'require|min:5|max:15',
        'sex' => 'in:0,1',
        'age' => 'require|between:18,60',
        'salary' => 'require|gt: 1500'
    ];

    错误信息可以自定义: 
    protected $message = [
        'name.require' => '员工姓名不能为空',
        'name.min' => '姓名不能少于5个字符',
        'name.max' => '姓名不能大于15个字符',
        'sex.in' => '性别只能选择男或女',
        'age.require' => '年龄必须输入',
        'age.between' => '年龄必须在18到60周岁之间',
        'salary.require' => '工资必须输入',
        'salary.gt' => '工资必须大于1500元'
    ];
}

//验证器controller
<?php 
namespace app\index\controller;

use think\Controller;
use app\validate\Staff; //导入验证器
use think\Validate;
class Verify extends Controller
{
    //验证器: 直接实例化验证器完成验证
    public function demo1()
    {
        //准备要验证的数据
        // $data = [
        //     // 'name'=>'zhu',
        //     'name'=>'zhulaoshi',
        //     'sex' => 1,
        //     'age' => 15,
        //     'salary' => 1200
        // ];

        $data = [
         'name'=>'zhulaoshi',
         'sex' => 0,
         'age' => 26,
         'salary' => 7200
        ];

        $validate = new Staff();
        if (!$validate->check($data)) {
            dump($validate->getError());
        } else {
            return '验证通过';
        }
    }

    //验证器: 使用控制器内容的验证对象来完成验证: $this->validate($data, $rule)
    public function demo2()
    {
        //准备要验证的数据
        $data = [
            // 'name'=>'zhu',
            'name'=>'zhulaoshi',
            'sex' => 0,
            'age' => 2225,
            'salary' => 1600
        ];

        $rule = 'app\validate\Staff';
        $rule = [
            'age' => 'between:10,50',
        ];
        $message = [
            'age.between' => '年龄必须在10到50之间'
        ];
        $data = ['age'=>8];
        // $res = $this->validate($data,$rule);
        $res = $this->validate($data,$rule,$message);
        if (true !== $res) {      //验证成功返回true,否则返回错误信息 
            return $res;
        }
        return '验证成功';
    }

    //独立验证: 直接实例化think\Validate.php进行验证
    
    public function demo3()
    {
        //主要是通过Validate::make()和check()进行验证
        //make($rule,$mess):创建验证规则与错误信息
        //check($data)完成数据验证
        
        //1.创建验证规则
        $rule = [
            'age' => 'require|between:20,60'
        ];

        //2.创建错误信息
        $mess = [
            'age.require' => '年龄必须填写',
            'age.between' => '年龄必须在20到60之间'
        ];

        //3.创建验证数据
        $data = ['age' => 13];

        //初始化验证器类,并返回验证器实例
        $validate = Validate::make($rule, $mess);

        $res = $validate->check($data);

        return $res ? '验证通过' : $validate->getError();
    }


}

批改老师:韦小宝批改时间:2018-12-24 11:47:44
老师总结:写的很不错哦!熟悉了这些功能后,在后面的项目中也可以进行使用哦!

发布手记

热门词条