yii2 scenarios rules 使用心得
2015-11-16 11:49
681 查看
原文转自 It技术擎
下面介绍scenarios rules 使用 心得
例子: region.php
public function scenarios()
{
$parent_scenarios = parent::scenarios();//继承父类的场景
//定义自己的场景
$self_scenarios = [
'create' => ['region_name','pid'],//登录的时候需要的字段
'update' => ['region_name'],//注册的时候需要的字段
];
//合并场景
return array_merge($parent_scenarios,$self_scenarios);
}
/**
* @inheritdoc
*/
public function rules()
{
return [
#[['region_name','pid', 'pinyin'],'required','message' => '是必填写项1'],//A
[['region_name', 'pinyin','pid'],'required','message' => '是必填写项2','on'=>'create'],//B
#[['region_name'],'required','message' => '是必填写项3','on'=>"create"],//C
[['pid', 'level', 'status'], 'integer'],
[['region_name', 'pinyin', 'zip'], 'string', 'max' => 100],
[['short_name'], 'string', 'max' => 50]
];
}
regioncontroller.php
public function actionCreate()
{
$model = new Region();
$model->setScenario('create');
... ...
}
如果想使用场景的话 在controller对应的action里面一定要把场景的名称带上。不管是使用scenarios 还是rules
以下是做create操作的
1、 如上的scenarios 加 B
scenarios 里面的create只定义了两个字段'region_name','pid' 而 rules里面却定义了 三个字段'region_name', 'pinyin','pid' 并且指定场景是create.
这样在create操作的时候 只会校验 'region_name','pid' 两个字段。'pinyin'字段不进行校验 ,校验规则是B
2、如上的scenarios 加 A
scenarios 里面的create只定义了两个字段'region_name','pid' 而 rules里面却定义了 三个字段'region_name', 'pinyin','pid' 未指定任何的场景.
这样在create操作的时候 只会校验 'region_name','pid' 两个字段。'pinyin'字段不进行校验,校验规则是A
3、如上的scenarios 加 A 加B
scenarios 里面的create只定义了两个字段'region_name','pid' 而 rules里面却定义了 三个字段'region_name', 'pinyin','pid' ,且一个指定场景一个未指定使用的是默认的
这样的结果和上面的 2的结果是一样的 ,校验规则是A
4、如上的scenarios 加 C
scenarios 里面的create只定义了两个字段'region_name','pid' 而 rules里面却定义了 一个字段'region_name' 并且指定场景是create.
这样在create操作的时候 只会校验 'region_name' 一个字段。'pid'字段会不进行校验
总结
1、当指定场景的时候 controller是一定要存在指定的场景名称的
2、rules里面校验的字段一定要比scenarios里面定义的字段多
3、当默认场景存在的时候 默认是优先的,自定义的次之
4、rules里面未指定场景的会全部校验
下面介绍scenarios rules 使用 心得
例子: region.php
public function scenarios()
{
$parent_scenarios = parent::scenarios();//继承父类的场景
//定义自己的场景
$self_scenarios = [
'create' => ['region_name','pid'],//登录的时候需要的字段
'update' => ['region_name'],//注册的时候需要的字段
];
//合并场景
return array_merge($parent_scenarios,$self_scenarios);
}
/**
* @inheritdoc
*/
public function rules()
{
return [
#[['region_name','pid', 'pinyin'],'required','message' => '是必填写项1'],//A
[['region_name', 'pinyin','pid'],'required','message' => '是必填写项2','on'=>'create'],//B
#[['region_name'],'required','message' => '是必填写项3','on'=>"create"],//C
[['pid', 'level', 'status'], 'integer'],
[['region_name', 'pinyin', 'zip'], 'string', 'max' => 100],
[['short_name'], 'string', 'max' => 50]
];
}
regioncontroller.php
public function actionCreate()
{
$model = new Region();
$model->setScenario('create');
... ...
}
如果想使用场景的话 在controller对应的action里面一定要把场景的名称带上。不管是使用scenarios 还是rules
以下是做create操作的
1、 如上的scenarios 加 B
scenarios 里面的create只定义了两个字段'region_name','pid' 而 rules里面却定义了 三个字段'region_name', 'pinyin','pid' 并且指定场景是create.
这样在create操作的时候 只会校验 'region_name','pid' 两个字段。'pinyin'字段不进行校验 ,校验规则是B
2、如上的scenarios 加 A
scenarios 里面的create只定义了两个字段'region_name','pid' 而 rules里面却定义了 三个字段'region_name', 'pinyin','pid' 未指定任何的场景.
这样在create操作的时候 只会校验 'region_name','pid' 两个字段。'pinyin'字段不进行校验,校验规则是A
3、如上的scenarios 加 A 加B
scenarios 里面的create只定义了两个字段'region_name','pid' 而 rules里面却定义了 三个字段'region_name', 'pinyin','pid' ,且一个指定场景一个未指定使用的是默认的
这样的结果和上面的 2的结果是一样的 ,校验规则是A
4、如上的scenarios 加 C
scenarios 里面的create只定义了两个字段'region_name','pid' 而 rules里面却定义了 一个字段'region_name' 并且指定场景是create.
这样在create操作的时候 只会校验 'region_name' 一个字段。'pid'字段会不进行校验
总结
1、当指定场景的时候 controller是一定要存在指定的场景名称的
2、rules里面校验的字段一定要比scenarios里面定义的字段多
3、当默认场景存在的时候 默认是优先的,自定义的次之
4、rules里面未指定场景的会全部校验
相关文章推荐
- 从零开始学YII2框架(四)扩展插件yii2-kartikgii
- 从零开始学YII2框架(三)扩展插件yii2-gird
- 从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
- Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
- 从零开始学YII2框架(二)通过 Composer 安装扩展插件
- Yii2 操作不同的数据库
- Yii2 自定义过滤器
- 使用 yii2-detail-view 扩展修改/删除/查看模型数据
- 使用yii2 composer更新后报错 ::addRules()
- yii2 Activeform
- yii2 session的使用方法
- ActiveRecord Relation, 通过第三张表建立的关系
- ActiveRecord, Lazy and Eager Loading
- (十三) yii2 checkboxList小部件默认选中
- Yii2.0 对数据库 查询的一些简单的操作
- yii 权限和restful服务(一)增加自定义restful服务
- php实现新浪微博第三方信任登录
- Yii2的urlmanager开启
- Yii2 中 如何设置 keywords 和 descripition