yii场景
来源:互联网 发布:全国安全知识网络竞赛 编辑:程序博客网 时间:2024/05/29 03:07
场景
模型可能在多个 场景 下使用,例如 User
模块可能会在收集用户登录输入, 也可能会在用户注册时使用。在不同的场景下, 模型可能会使用不同的业务规则和逻辑, 例如 email
属性在注册时强制要求有,但在登陆时不需要。
模型使用 yii\base\Model::scenario 属性保持使用场景的跟踪, 默认情况下,模型支持一个名为 default
的场景, 如下展示两种设置场景的方法:
// 场景作为属性来设置$model = new User;$model->scenario = 'login';// 场景通过构造初始化配置来设置$model = new User(['scenario' => 'login']);
默认情况下,模型支持的场景由模型中申明的 验证规则 来决定, 但你可以通过覆盖yii\base\Model::scenarios()方法来自定义行为, 如下所示:
namespace app\models;use yii\db\ActiveRecord;class User extends ActiveRecord{ const SCENARIO_LOGIN = 'login'; const SCENARIO_REGISTER = 'register'; public function scenarios() { return [ self::SCENARIO_LOGIN => ['username', 'password'], self::SCENARIO_REGISTER => ['username', 'email', 'password'], ]; }}
Info: 在上述和下述的例子中,模型类都是继承yii\db\ActiveRecord, 因为多场景的使用通常发生在Active Record 类中.
scenarios()
方法返回一个数组,数组的键为场景名,值为对应的 active attributes活动属性。 活动属性可被 块赋值 并遵循验证规则 在上述例子中,username
和 password
在login
场景中启用,在 register
场景中, 除了 username
and password
外 email
也被启用。
scenarios()
方法默认实现会返回所有yii\base\Model::rules()方法申明的验证规则中的场景, 当覆盖scenarios()
时,如果你想在默认场景外使用新场景, 可以编写类似如下代码:
namespace app\models;use yii\db\ActiveRecord;class User extends ActiveRecord{ const SCENARIO_LOGIN = 'login'; const SCENARIO_REGISTER = 'register'; public function scenarios() { $scenarios = parent::scenarios(); $scenarios[self::SCENARIO_LOGIN] = ['username', 'password']; $scenarios[self::SCENARIO_REGISTER] = ['username', 'email', 'password']; return $scenarios; }}
场景特性主要在验证 和 属性块赋值 中使用。 你也可以用于其他目的, 例如可基于不同的场景定义不同的 属性标签。
1 0
- yii场景
- Yii 理解场景
- yii 校验登录(场景)
- Yii的场景
- yii setScenario场景验证问题
- Yii中validator之scenario 场景
- yii框架中“场景”的简明解释
- Yii
- yii
- Yii
- yii
- yii
- yii
- Yii
- yii
- yii
- yii
- yii
- 关于CSS
- iOS基础:正则表达式
- 内存管理器(二十二) 标记-整理回收算法
- jsp上传文件名乱码
- MKNetworkKit
- yii场景
- 数学期望,I - Beating the Dataset,Light OJ 1274
- ZooKeeper伸缩性
- 算法分析基础
- poj-1258
- 内存与编程小记
- 合唱队
- HashMap实现原理分析
- red hat linux命令行修改IP