返回 模型自动操作与...... 登陆

模型自动操作与数据验证总结

黄志博 2018-11-27 18:14:57 240

一、获取器

获取器1:sex,0=>男,1=>女

public function getSexAttr($value)
	{
		$sex = [0=>'男',1=>'女'];
		return $sex[$value];
	}

获取器2:传入第二个参数,引用全部的字段值

public function getSalaryAttr($value,$data)
	{
		return $data['name'].'的工资是:'.$value;
	}

获取器3:可以为表中不存在的字段进行设置,纯粹地拼装字段内容

public function getStaffInfoAttr($value,$data)
	{
		return '我是'.$data['name'].'今年都'.$data['age'].'岁了,工资才'.$data['salary'].',好可怜呀';
	}

动态获取器:从 V5.1.20+ 版本开始,可以支持对模型使用动态获取器,无需在模型类中定义获取器方法。

$res = Staff::withAttr('sex',function($value,$data){
			$sex = [0=>'男',1=>'女'];
			return $sex[$value];
		})->find(1);
		echo $res->sex;

二、修改器

修改器1:

public function setEntryTimeAttr($value)
	{
		return strtotime($value);
	}

修改器2:支持第二个参数,引用全部字段值

public function setSalaryAttr($value,$data)
	{
		return $value+$data['age'];
	}

三、类型转换

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

四:自动完成

自定完成针对写操作:新增,更新,当于给字段设置默认值

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

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

protected $auto = ['age'=>30];//针对新增和更新

五、自动时间戳

//开启当前模型的自动时间戳功能
        protected $autoWriteTimestamp = true;

//设置用户自定义的新增和更新时间的字段名
	protected $createTime = 'create_time';
	protected $updateTime = 'update_time';

六、验证器

创建一个验证器类

<?php
namespace app\validate;

use think\Validate;

class Staff extends Validate
{
	//验证规则
	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' => '姓名必须在4到15个字符之间',
		'sex.in' => '性别必须是男或女',
		'age.require' =>'年龄不能为空',
		'age.between' =>'年龄必须在18-60之间',
		'salary.require'=>'工资必须输入',
		'salary.gt' =>'工资必须大于1500'
	];
}

调用验证器进行数据验证

public function demo1()
	{
		//准备要验证的数据
		$data = [
			'name'=> 'zhulaoshi',
			'sex'=> 0,
			'age' => 30,
			'salary'=>3000

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

验证器的简化

public function demo2()
	{
		// 准备要验证的数据
		$data = [
			'name'=> 'zhulaoshi',
			'sex'=> 0,
			'age' => 30,
			'salary'=>3000

		];

		// 准备验证规则
		$rule = 'app\validate\Staff';

		$res = $this->validate($data,$rule);

		

		if(true !== $res){
			return $res;
		}
		return '验证成功';
	}
public function demo2()
	{

		$data = ['age'=>5];
		$rule = ['age'=>'between:10,50'];
		$mess = ['age.between'=>'年龄必须在10到50之间'];

		$res = $this->validate($data,$rule,$mess);

		if(true !== $res){
			return $res;
		}
		return '验证成功';
	}

七:独立验证

独立验证就是直接使用think\Validate类进行验证

//独立验证
	public function demo3()
	{
		//1.创建验证规则
		$rule = ['age'=>'require|between:20,60'];
		//2.创建错误信息
		$mess = [
			'age.require'=>'年龄必须填写',
			'age.between'=>'年龄必须在20到60之间'
		];
		//3.创建数据
		$data = ['age'=>13];
		$validate = \think\Validate::make($rule,$mess);

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

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


最新手记推荐

• 用composer安装thinkphp框架的步骤 • 省市区接口说明 • 用thinkphp,后台新增栏目 • 管理员添加编辑删除 • 管理员添加编辑删除

全部回复(0)我要回复

暂无评论~
  • 取消 回复 发送
  • PHP中文网