YII2十三大特性2
第十三
场景(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的更多相关文章
- YII2十三大特性
		第一(框架&项目) 1. 框架安装 2. 框架扩展安装 3. 项目初始化-->php yii init 4. 美化URL配置 'urlManager' => [ 'enablePr ... 
- 如何使用yii2的缓存依赖特性
		目录 如何使用yii2的缓存依赖特性 概述 页面缓存 缓存依赖 链式依赖 总结 如何使用yii2的缓存依赖特性 概述 缓存是Yii2的强大特性之一,合理使用缓存技术可以有效地减小服务器的访问压力.Yi ... 
- Yii2版本号新特性简单介绍
		Yii2 Beta版本号在今年4月份公布.眼下正在改动问题和完好文档中. Yii2要求PHP版本号不低于5.4,主要有例如以下改进: 1)支持PHP框架间协作组制定的PSR-4标准,这简化了文件夹并提 ... 
- yii2实战教程之新手入门指南-简单博客管理系统
		作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ... 
- yii2使用相关记录
		#Yii::$app->user 是指yii\web\User这个类 #yii2在命令行下执行 D: cd D:\wnmp\php5 php D:\wnmp\www\yii2\yii test/ ... 
- PHP的学习--Traits新特性
		在阅读yii2源码的时候接触到了trait,就学习了一下,写下博客记录一下. 自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits. Traits 是一种为类似 PHP 的 ... 
- Yii2初谈
		Yii2发布有两个月时间了,一直没有去仔细关注过. 今天在回顾PSR标准时,稍稍扫了一眼Yii2.它的命名风格还是一如既往的与Zend那种既首字母大写又还要下划线连接的很二的命名风格格格不入.其实我看 ... 
- yii2高级应用
		public function searchWithRelated() { $criteria = new CDbCriteria; $criteria->together = ... 
- Yii2 GridView自定义链接之重写 ActionColumn
		最近刚开始用yii2,真是超棒的,但是也有许多不足的地方,今天要说的就是GridView链接问题. <?= GridView::widget([ 'dataProvider' => $ ... 
随机推荐
- Redis漏洞,远程攻击
			文章转自http://blog.csdn.net/whs_321/article/details/51734602 http://blog.knownsec.com/2015/11/analysis- ... 
- HTML5中的execCommand命令
			HTML5中的execCommand命令 在html5中,可以通过execCommand方法来运行一条命令,每一条命令都将对用户通过鼠标所选取的内容执行一些操作. 1. execCommand方法 浏 ... 
- <转>jmeter(十五)函数助手
			jmeter作为一个开源的性能测试工具,作用还是蛮强大的,找到一篇对jmeter中函数助手解释蛮详细的一篇博客,感觉不错,转载过来,希望对大家有所帮助. 由于时间和版本问题,其中有些内容和排版我做了修 ... 
- linux gcc nginx
			1.安装GCC[root@rekfan.com opt]# rpm -ivh cpp-4.1.2-48.el5.i386.rpm[root@rekfan.com opt]# rpm -ivh kern ... 
- Win10上运行Docker
			1. 前言 Docker最近推出了可以运行在Win10和Mac上的稳定版本,让我们赶紧来体验一下. Docker发布Mac和Windows 的目标非常简单——开发者可以更加简单方便地在研发机器上使用D ... 
- 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(视频总揽)
			1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(方案总揽) https://v.youku.com/v_show/id_XNDE0Njk3Njg2OA==. ... 
- odoo系统之产品表
			# 输入产品带出它默认的包装方式\单位\品名\规格 def get_product_unit(self, cr, uid,ids,product_id,pcust_order_no,pdate_pla ... 
- Foreach循环输出索引值
			循环输邮索引值,使用for是没有任何问题: class Bh { public string[] str { get; set; } public void TestFor() { ; i < ... 
- React 等框架使用 index 做 key 的问题
			React 等框架使用 index 做 key 的问题 假如有两个树,一个是之前,一个是更变之后,我们抽象成两种可能性. 插入内容在最后 插入内容在最前 关于插在中间,原理一样,就不阐述. 使用 ul ... 
- 【JVM.11】Java内存模型与线程
			鲁迅曾经说过“并发处理的广泛应用是使得Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类‘压榨‘ 计算机运行能力的最有力武器.” 一.概述 多任务处理在现代计算机操作系统中几乎已 ... 
