博客列表 >实现获取器 修改器以及验证器的使用——2018年5月25日作业

实现获取器 修改器以及验证器的使用——2018年5月25日作业

白猫警长的博客
白猫警长的博客原创
2018年05月28日 18:26:44935浏览


模型中 获取器的3种用法




<?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 function getSexAttr($value)
    {
    	$staff = [0=>'男', 1=>'女'];
    	return '性别:'.$staff[$value];
    }

    //获取器2
    protected function getSalaryAttr($value,$data)
    {
    	return $data['name'].'3月份参考工资:'.($value+200).'元';
    }

    //获取器3: 可以为表中不存在的字段设置获取器方法,纯粹为了拼装字段内容
    protected function getStaffInfoAttr($value, $data)
    {
    	//其实$value此时仅是一个占位符,可任意命名,无任何意义
    	return '我叫:'.$data['name'].',今年'.$data['age'].'岁,每月工资:'.$data['salary'].'元';
    }


控制器实现的代码:

实例

<?php 
namespace app\index\controller;
use think\Controller;
use app\index\model\Staff;

class ModelEdu extends Controller
{
	//获取器
	public function gain()
	{
		$res = staff::get(1);
		// dump($res);
		echo $res->getData('sex'), '<br>';
		echo $res->salary, '<br>';
		echo $res->sex, '<br>';
		echo $res->staff_info;
	}


模型中:修改器的两种用法(model\Staff.php)

 //修改器1:将入职时间自动转为时间戳存储
    protected function setEntryTimeAttr($value)
    {
    	return strtotime($value);
    }

    //修改器2:支持传入第二个参数,引用其它字段的值
    protected function setSalaryAttr($value, $data)
    {	
    	//salary字段存入表中时,自动加上员工的年龄,纯粹演示,无实际意义
    	return $value+$data['age']; //模型实现原理,在控制器输入工资5000,比如年龄是35,则工资5035
    }
    
    //类型转换
    protected $type = [
    	'staff_id' => 'interger',
    	'sex' => 'interger',
    	'age' => 'interger',
    	'salary' => 'interger'
    ];

    //自动完成:主要针对新增操作,更新操作
    //相当于给字段设置默认值
    // protected $inser = ['sex'=>0,'salary'=>1500];	//针对新增操作:当用户新增一条记录时,sex和salary就是默认值 
    // protected $update = ['sex'=>0];	//针对更新操作:当用户更新一条记录时,sex就是默认值 
    protected $auto = ['sex'=>0,'salary'=>1500]; 	//同时针对新增和更新操作

控制器中:修改器代码实例(controller\ModelEdu.php)

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

		$res = Staff::get(3);
		$res->salary = 9900;	//修改工资
		$res->save();

		return '修改成功';
	}
	
	//自动完成:
	public function auto()
	{
		Staff::create(['name'=>'赵丽颖','age'=>32]);
		return '新增成功';
	}

控制器中:验证器(验证器类、独立验证)(controller/Verify.php)

<?php 
namespace app\index\controller;
use think\Controller;
use think\Validate;		
use app\validate\Staff;	//导入验证器
class Verify extends Controller
{
	//验证器: 直接实例化验证器完成验证
	public function Demo1()
	{
		//准备要验证的数据(字段)
		$data=[
			'name' => 'PHP中文网',
			'sex' => 0,
			'age' => 20,
			'salary' => 8000
		];

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

	//验证器: 使用控制器内容的验证对象来完成验证: $this->validate($data, $rule)
	public function Demo2()
	{
		//1. 准备要验证的数据(字段)
		// $data=[
		// 	'name' => 'PHP中文网',
		// 	'sex' => 0,
		// 	'age' => 20,
		// 	'salary' => 8000
		// ];

		// //准备一下验证规则
		// $rule = 'app\Validate\Staff';
		// $res = $this->validate($data,$rule); 

		//2. 也可以直接在控制器中进行验证
		$data = ['age' => 35];	//数据输出
		$rule = ['age' => 'between:10,50'];	//验证年龄的范围,大于或小于当前值就会触发下面的错误提示信息
		$mess = ['age.between' => '年龄必须在10至50之间'];
		$res = $this->validate($data,$rule,$mess);

		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:18,60'];

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

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

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

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

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

验证器:创建验证规则及属性进行配置

Validate/Staff.php

<?php 
namespace app\validate;
use think\Validate;

class Staff extends Validate
{
	//创建验证规则
	//以属性的方式进行配置,属性不能更改
	protected $rule = [
		'name'=>'require|min:5|max:15',	//最少5,最大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' => '工资必须大于3000元'
	];
}

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议