批改状态:未批改
老师批语:
<?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;
} //修改器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]; //同时针对新增和更新操作//修改器: 先给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 '新增成功';
}<?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元'
];
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号