多语言展示
当前在线:832今日阅读:167今日分享:16

Yii2.0学习第18课:模型(Models)之应用场景

提到场景,我们可以简单理解成“这段代码是干嘛用的”。比如登陆场景,注册场景等等。我们在前面的课程中学习了模型的验证规则。后来遇到一个问题,由于app\models\HlongUser.php代表了用户信息,显然登陆的验证规则和注册的验证规则是不同的,如何在不拆分代码的情况下实现两种场景使用一套验证规则呢?本文介绍一下其功能,希望对需要的朋友有所帮助。0Yii2.0学习第17:模型之验证规则0Yii2.0学习第16课:模型(Models)之标签的学习
工具/原料
1

LNMP环境

2

浏览器

方法/步骤
1

运行并访问RegisterController.php,查看需要验证的字段信息:(1)用户名;(2)邮箱;(3)密码。

2

参看“模型之验证规则”的说明,创建(或修改)我们的LoginController.php,得到的需要验证的字段信息:(1)用户名;(2)密码;

3

步骤1和步骤2中使用了同一个app\models\HlongUser.php,我们查看其验证规则,由于两个场景需要验证的信息是不一样的。登陆一般是不需要验证邮箱的。我们当然可以将HlongUser.php拆分长登陆模型和注册模型。但是Yii2.0强大的场景处理,给我们提供了一个很好的方法。

4

打开app\models\HlongUser.php,贴入以下代码:const SCENARIO_LOGIN = 'login';    const SCENARIO_REGISTER = 'register';    public function scenarios()    {        return [            self::SCENARIO_LOGIN => ['username', 'password'],            self::SCENARIO_REGISTER => ['username', 'email', 'password'],        ];    }

5

这时候还没有结束,你可以尝试重新访问Login或Register并提交数据会发现如下错误,原因是我们在控制器中没有设置场景,系统调用默认场景default导致出错:

6

分别在两种场景的控制器内添加场景的调用:(1)登陆:$model = new User(['scenario' => 'login']);(1)注册:$model = new User(['scenario' => 'register']);

7

再次访问Login和Register并提交数据,查看效果:

推荐信息