Yii2 学习笔记之场景应用

场景的使用结合验证来操作,场景的意思就是说,在操作某个表对象的时候,会有新增,查询,修改,删除等。这些操作就各自对应一个场景,这样就可以方便的为每个场景进行验证逻辑的代码编写。

1. 创建frontend\models\User.php ,定义其scenarios以及rules

public function scenarios()
{
	//继承了父类的default场景,并新增了一个update场景(只验证和操作一个字段《real_name》)
    return array_merge(parent::scenarios(),[
        'update' => ['real_name'],
    ]);
}

public function rules()
{
    return [
        [['real_name', 'age', 'job_name'], 'required'],
        [['age'], 'integer'],
        [['real_name','job_name'], 'string', 'max' => 50],
        [['created_at'], 'safe'],
    ];
}

2. 在controller中调用时,使用

// 新增时,因为没有设置Scenario,所以引用的是default场景,则是默认所有的rules规则都执行。
public function actionCreate()
{
    $model = new User();

    if ($model->load(\Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['index']);
    } else {
        $this->layout = 'iframe';

        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

// 修改时候,只对real_name字段进行修改和验证
public function actionUpdate($id)
{
    $model = $this->findModel($id);
    $model->setScenario('update');

    if ($model->load(\Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['index']);
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}

参考连接

http://www.manks.top/how-to-set-scenario-in-yii2.html

(完)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术记录

centOS7 mini配置linux服务器(一)安装centOs7

1、 准备centos-7 (minni镜像) 官网地址http://isoredirect.centos.org/centos/7/isos/x86_64/C...

48780
来自专栏ppjun专栏

【转】 Android是怎么样启动应用程序的,从点击启动图标到显示视图到底做了什么操作

转载自 https://juejin.im/post/5b0d0a0cf265da091f105858

11260
来自专栏技术博文

LNMP源码编译安装(centos7+nginx1.9+mysql5.6+php7)

1.准备工作: 1)把所有的软件安装在/Data/apps/,源码包放在/Data/tgz/,数据放在/Data/data,日志文件放在/Data/logs,项...

44560
来自专栏机器学习算法工程师

Windows下如何安装xgboost

最近有童鞋在后台询问windows下如何安装xgboost的问题,然后燕哥在团队中一问,哎!还真的有小伙伴会。然后一篇xgboost安装教程就热乎乎地出炉喽~ ...

29050
来自专栏蓝天

Solution: AC_CONFIG_MACRO_DIR conflicts with ACLOCAL_AMFLAGS

.ibtoolize: AC_CONFIG_MACRO_DIR([./aclocal]) conflicts with ACLOCAL_AMFLAGS=-I ...

9410
来自专栏康怀帅的专栏

SSH 配置详解

本文详细介绍了 SSH 的配置。 无密码登录 # 产生公钥与私钥对 $ ssh-keygen # 按三次回车键 # 将本机的公钥 id_rsa.pub 复制...

50540
来自专栏杂烩

Redis linux下安装配置 原

make命令执行完成后,会在当前目录下生成本个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-sta...

7620
来自专栏Angular&服务

mac安装nvm

如果没有.bash_profile文件需要自行touch .bash_profile哦

12630
来自专栏鸿的学习笔记

日志采集技术笔记

使用Linux的rename机制保证文件写入要么成功,要么失败,绝对不能出现写了一半的情况。

44450
来自专栏PHP实战技术

20条Linux命令面试问答

问:1 如何查看当前的Linux服务器的运行级别?   答: ‘who -r’ 和 ‘runlevel’ 命令可以用来查看当前的Linux服务器的运行级别。 ...

36280

扫码关注云+社区

领取腾讯云代金券