第十三

场景(scenario)的使用

例如:有三个场景,分别为创建,更新,确认回款

首先,定义所有的场景,及规则,如下所示:

<?php

namespace core\models;

use common\models\Base;
use Yii;
use yii\base\Exception;

class WmsSamplingApplication extends \common\models\WmsSamplingApplication
{

    const TYPE_HERB = 1;
    const TYPE_PRODUCT = 2;
    const CHECK_STATUS_INIT = 0;
    const CHECK_STATUS_OK = 1;
    const CHECK_STATUS_DENY = 2;

    public $disabled = false;

    public function scenarios()
    {
        $scenario = parent::scenarios();

        $scenario['scenario_create'] = [
                'wms_sampling_application_code',
                'common_producer_info_id',
                'wms_sampling_application_type',
                'wms_sampling_application_category',
                'wms_sampling_application_user_id',
                'wms_sampling_application_apply_at',
                'wms_sampling_application_apply_text'
            ];
        $scenario['scenario_update']=[
                'wms_sampling_application_code',
                'common_producer_info_id',
                'wms_sampling_application_type',
                'wms_sampling_application_category',
                'wms_sampling_application_user_id',
                'wms_sampling_application_apply_at',
                'wms_sampling_application_apply_text'
            ];
        $scenario['scenario_cash']=[
                'wms_sampling_application_cash_user_id',
                'wms_sampling_application_cash_at',
                'wms_sampling_application_cash_text',
                'wms_sampling_application_cash_status'
            ];
        return $scenario;
    }

    public function rules()
    {
        return [
            [['wms_sampling_application_code'], 'required', 'message'=>'必填字段', 'on'=>['scenario_create', 'scenario_update']],
            [['common_producer_info_id'], 'required', 'message'=>'必填字段', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_type'], 'required', 'message'=>'必填字段', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_category'], 'required', 'message'=>'必填字段', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_user_id'], 'required', 'message'=>'必填字段', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_apply_at'], 'required', 'message'=>'必填字段', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_apply_text'], 'required', 'message'=>'必填字段', 'on'=>['scenario_create', 'scenario_update']],

            [['wms_sampling_application_cash_user_id'], 'required', 'message'=>'必填字段', 'on'=>['scenario_cash']],
            [['wms_sampling_application_cash_at'], 'required', 'message'=>'必填字段', 'on'=>['scenario_cash']],
            [['wms_sampling_application_cash_text'], 'required', 'message'=>'必填字段', 'on'=>['scenario_cash']],
            [['wms_sampling_application_cash_status'], 'required', 'message'=>'必填字段', 'on'=>['scenario_cash']],

            [['wms_sampling_application_code'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_type'], 'integer', 'on'=>['scenario_create', 'scenario_update']],
            [['common_producer_info_id'], 'integer', 'on'=>['scenario_create', 'scenario_update']],
            [['common_producer_info_name'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_user_id'], 'integer', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_user_name'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_user_phone'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_apply_at'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_apply_text'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_check_user_id'], 'integer', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_check_user_name'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_check_user_phone'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_check_at'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_check_status'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_check_text'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['created_at'], 'integer', 'on'=>['scenario_create', 'scenario_update']],
            [['updated_at'], 'integer', 'on'=>['scenario_create', 'scenario_update']],
            [['is_del'], 'integer', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_related_id'], 'integer', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_related_sheet_number'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_category'], 'integer', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_category_name'], 'string', 'on'=>['scenario_create', 'scenario_update']],
            [['wms_sampling_application_cash_balance'], 'string', 'on'=>['scenario_cash']],
            [['wms_sampling_application_cash_user_id'], 'integer', 'on'=>['scenario_cash']],
            [['wms_sampling_application_cash_user_name'], 'string', 'on'=>['scenario_cash']],
            [['wms_sampling_application_cash_at'], 'string', 'on'=>['scenario_cash']],
            [['wms_sampling_application_cash_text'], 'string', 'on'=>['scenario_cash']],
            [['wms_sampling_application_cash_status'], 'integer', 'on'=>['scenario_cash']],
        ];
    }

最后,使用场景 ,如下图所示:

public function actionCash($id)
    {
        $model = $this->findModel($id);
        $model->setScenario('scenario_cash');
        if ($model->load(Yii::$app->request->post())) {
            $userModel = \core\models\User::getUser(\Yii::$app->user->id);
            $model->wms_sampling_application_cash_user_name = $userModel->name;
            $model->wms_sampling_application_cash_at = strval(strtotime($model->wms_sampling_application_cash_at));
            $model->wms_sampling_application_cash_status = 1;

            $model->save(false);
            return $this->redirect(['index']);
        } else {
            $model->wms_sampling_application_cash_user_id = \Yii::$app->user->id;
            $model->wms_sampling_application_cash_at = time();
            return $this->renderAjax('cash', [
                'model' => $model,
            ]);
        }
    }

  

YII2十三大特性2的更多相关文章

  1. YII2十三大特性

    第一(框架&项目) 1. 框架安装 2. 框架扩展安装 3. 项目初始化-->php yii init 4. 美化URL配置 'urlManager' => [ 'enablePr ...

  2. 如何使用yii2的缓存依赖特性

    目录 如何使用yii2的缓存依赖特性 概述 页面缓存 缓存依赖 链式依赖 总结 如何使用yii2的缓存依赖特性 概述 缓存是Yii2的强大特性之一,合理使用缓存技术可以有效地减小服务器的访问压力.Yi ...

  3. Yii2版本号新特性简单介绍

    Yii2 Beta版本号在今年4月份公布.眼下正在改动问题和完好文档中. Yii2要求PHP版本号不低于5.4,主要有例如以下改进: 1)支持PHP框架间协作组制定的PSR-4标准,这简化了文件夹并提 ...

  4. yii2实战教程之新手入门指南-简单博客管理系统

    作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...

  5. yii2使用相关记录

    #Yii::$app->user 是指yii\web\User这个类 #yii2在命令行下执行 D: cd D:\wnmp\php5 php D:\wnmp\www\yii2\yii test/ ...

  6. PHP的学习--Traits新特性

    在阅读yii2源码的时候接触到了trait,就学习了一下,写下博客记录一下. 自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits. Traits 是一种为类似 PHP 的 ...

  7. Yii2初谈

    Yii2发布有两个月时间了,一直没有去仔细关注过. 今天在回顾PSR标准时,稍稍扫了一眼Yii2.它的命名风格还是一如既往的与Zend那种既首字母大写又还要下划线连接的很二的命名风格格格不入.其实我看 ...

  8. yii2高级应用

    public function searchWithRelated() {         $criteria = new CDbCriteria; $criteria->together = ...

  9. Yii2 GridView自定义链接之重写 ActionColumn

    最近刚开始用yii2,真是超棒的,但是也有许多不足的地方,今天要说的就是GridView链接问题.   <?= GridView::widget([ 'dataProvider' => $ ...

随机推荐

  1. 深入浅出的webpack构建工具---DevServer配置项(二)

    深入浅出的webpack构建工具---DevServer配置项(二) 阅读目录 DevServer配置项 1. contentBase 2. port 3. host 4. headers 5. hi ...

  2. webpack2 项目构建一

    最近工作忙,学习被暂停了,还是网上多看看资料,多学习学习一下,看到一些好的资料,自己想整理一下,这不,webpack2项目构建都还没有弄懂,webpack3就已经发布了,说实话周末现在真不想看书和研究 ...

  3. python 知识

    def action_cancel_sale_order(self,cr,uid,ids,context=None): self.message_post(cr, uid, ids, body=u&q ...

  4. Spring Boot 之订制 logo

    Spring Boot 之订制 logo 简介 变量 配置 编程 源码 引申和引用 Spring Boot 启动时默认会显示以下 logo: . ____ _ __ _ _ /\\ / ___'_ _ ...

  5. P1438 无聊的数列

    P1438 无聊的数列 链接 分析: 等差数列可加,首项相加,公差相加. 代码: #include<cstdio> #include<algorithm> #include&l ...

  6. P4099 [HEOI2013]SAO

    P4099 [HEOI2013]SAO 贼板子有意思的一个题---我()竟然没看题解 有一张连成树的有向图,球拓扑序数量. 树形dp,设\(f[i][j]\)表示\(i\)在子树中\(i\)拓扑序上排 ...

  7. pycharm2019注册码一键实时获取,永久有效!

    pycharm2019专业版激活码 56ZS5PQ1RF-eyJsaWNlbnNlSWQiOiI1NlpTNVBRMVJGIiwibGljZW5zZWVOYW1lIjoi5q2j54mI5o6I5p2 ...

  8. Terraform:创建 Azure 虚机

    笔者在前文<Terraform 简介>中简单介绍了 Terraform 相关的概念,本文让我们使用 Terraform 在 Azure 上创建一个虚机,以此来直观体验一下 Terrafor ...

  9. 为小米(红米)6A解锁_ROOT_安装天下游虚拟定位教程_已亲身验证通过!附图

    第一步骤: 把TeamViewer发给客户 第二步骤: 在自己电脑上购买小米账号:http://shop1.91kami.com/UXWHTEY9KN?cid=1200 要求:(购买邮箱注册账号,需要 ...

  10. linux下日志文件error监控报警脚本分享

    即对日志文件中的error进行监控,当日志文件中出现error关键字时,即可报警!(grep -i error 不区分大小写进行搜索"error"关键字,但是会将包含error大小 ...