yskl 发表于 2018-2-11 11:46:24


            前言
场景,顾名思义,就是一个情景,一种场面。在yii2中也有场景,这个场景跟你所理解的场景含义差不多。
和用户有交互的系统必不可少的功能包括收集用户数据、校验和处理。实际业务中,往往还需要将数据进行持久化存储。出于安全考虑,开发人员应当牢牢把握“客户端的输入都是不可信”的准则,客户端传过来的数据先进行过滤和清洗后再存储或传递到内部系统。
Yii2推荐使用Model类来收集和校验用户数据,持久化的ActiveRecord类是其子类。Model类的load和validate两个方法,分别用来收集和校验客户端数据。哪些数据应该被收集,哪些数据需要在什么场景下验证,便是本文的主题:场景(scenario)和验证规则(rule)。
下面话不多说了,来随着小编一起看看详细的介绍吧。
系统结构
先引入一个简单的业务系统:系统中存在学生和教师两种角色,数据库中使用了三张表保存角色信息:
user:
student:
teacher:
实际业务不限于对这三张表的增删查改操作。为了简化问题,后续仅讨论user和student两张表的数据变更(给出teacher表是为了让读者不认为设计数据库的人是脑残:明明可以放到一张表的,为什么要拆开!)。
学生报名
学生报名是典型的增删查改操作,送分题。学生报名的简要代码示例如下:
public function actionSignup()
{
$data = Yii::$app->request->post();
$user = new User();
$user->load($data);
if ($user->save()) {
$student = new Student([
   "user_id" => $user->id,
]);
$student->load($data);
if ($student->save()) {
   // redirect to success page
} else {
   $user->delete();
}
}
// render error page
}
页: [1]
查看完整版本: Yii2中的场景(scenario)和验证规则(rule)详解