[moka同学笔记]yii2场景的使用(摘录)

前半部分为自己使用的过程,下边为转载的,具体地址见:http://blog.sina.com.cn/s/blog_88a65c1b0101j717.html

1.在model中

public function rules()
{
    return [
        [[‘join_verify‘, ‘create_activity‘, ‘is_open_group‘, ‘is_open_child_com‘,‘sendmail_limit‘,‘sendmail_from_name‘,‘sendmail_from‘,‘sendmail_replyto‘], ‘required‘,‘on‘=>‘setting‘],
        [[‘com_id‘, ‘join_verify‘, ‘create_activity‘, ‘is_open_group‘, ‘is_open_child_com‘, ‘is_deleted‘,‘is_open_sendmail‘], ‘integer‘],
        [[‘sendmail_limit‘],‘match‘,‘pattern‘=>‘/^[1-9]d*|0$/‘,‘message‘=>‘必须为正整数‘],
        [[‘created_at‘, ‘update_at‘], ‘safe‘],
        [[‘sendmail_from_name‘],‘string‘,‘max‘=>25],
        [[‘qr_code_path‘], ‘string‘, ‘max‘ => 200],
        [[‘join_declare‘, ‘join_form_ids‘], ‘string‘, ‘max‘ => 255],
        [[‘sendmail_smtp‘,‘sendmail_from‘,‘sendmail_replyto‘], ‘email‘],
        [[‘sendmail_smtp‘,‘sendmail_from‘,‘sendmail_replyto‘],‘string‘,‘max‘=>50]
    ];
}

2.在控制器controller中使用

//设置邮件
public function actionIndex($id){
    $model = CommunitySetting::find()
        ->joinWith(‘communityMail‘)
        ->where([‘usho_community_setting.com_id‘=>$id])
        ->one();
    if(!$model){
        $this->endOutputJson([
            ‘status‘ => 0,
            ‘alertType‘ => ‘danger‘,
            ‘alertMsg‘ => ‘未找到所需要的数据:(‘
        ]);
    }

$model->scenario = ‘setting‘;

   if($_POST){
       \Yii::$app->request->isPost ;
       if($model->load(Yii::$app->request->post()) && $model->validate() && $model->save()){
           \Yii::$app->getSession()->setFlash(‘success‘, ‘保存成功‘);
           $this->endOutputJson([
               ‘status‘ => 1,
               ‘alertType‘ => ‘info‘,
               ‘alertMsg‘ => ‘保存成功‘,
               ‘redirect‘ => \Yii::$app->request->url,
           ]);
       }else{
           $errArr = [];
           $model->errors ? $errArr = $model->errors : ‘‘;
           $this->endOutputJson([
               ‘status‘ => 0,
               ‘alertType‘ => ‘danger‘,
               ‘alertMsg‘ => $errArr
           ]);
       }
    }

    return $this->render(‘index‘,[
        ‘model‘=>$model
    ]);
}
 
理解为在设置邮件表单的时候,会用场景,而在编辑的时候,则不会在去验证。
 
上面感觉自己理解的不透彻,只是简单实现了功能。后来看到了下面的博客,整理说明的比较详细。

下面给大家介绍一下 yii2.0 场景的使用。小伙多唠叨一下了,就是担心有的人还不知道,举个简单的例子,现在在 post表里面有 title image content 三个的字段,当我创建一个 post 的时候,我想三个字段全部是必填项,但是你修改的时候,title content 两个字段是必填的, iamge 可以不填写。正常的情况下,

[[‘title‘, ‘content‘, ‘image‘], ‘required‘,],   但是我们更改的时候  只需要 [[‘title‘, ‘content‘], ‘required‘], 就可以了,但是少了 image 字段  我们的表单就无法提交,这种问题怎么办啊??场景可以帮你解决这种问题,下面是一个简单的场景实例。

1、首先我们在 model 里面定义一下场景  类名必须是  scenarios()

public function scenarios()
{
return [
  ‘create‘ => [‘title‘, ‘image‘, ‘content‘],
  ‘update‘ => [‘title‘, ‘content‘],
];
}

2、好的,如上所示,场景的基本设置我们就已经完成一部分了,下面我们设置  rules() ,调用场景我们用 on 关键字

[[‘title‘, ‘content‘], ‘required‘, ‘on‘ => [‘create‘, ‘update‘]],
[[‘image‘], ‘required‘, ‘on‘ => ‘create‘],
[[‘image‘], ‘image‘, ‘enableClientValidation‘ => true,   ‘maxSize‘ => 1024, ‘message‘ => ‘您上传的文件过大‘, ‘on‘ => [‘create‘, ‘update‘]],

on 指定的就是场景,一个场景用字符串,多个场景用数组

3、好的,model 里面我们就设置完毕了 现在开始调用吧 Controller 里面

$model = $this->findModel($id);

$model->setScenario(‘update‘); 或者 $model->scenario = ‘update‘;   都可以

上面的意思就是 调用 update 场景。一切就是这么简单,

具体地址见:http://blog.sina.com.cn/s/blog_88a65c1b0101j717.html

时间: 2024-12-26 07:09:06

[moka同学笔记]yii2场景的使用(摘录)的相关文章

[moka同学笔记]yii2.0小物件的简单使用(第二种方法)

1.在widgets/TestWidget.php中 1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: moka同学 5 * Date: 2016/08/05 6 * Time: 18:15 7 */ 8 namespace app\widgets; 9 10 use yii\base\Widget; 11 12 class TestWidget extends Widget 13 { 14 public $msg = ''; 15 16 //初始

[moka同学笔记]Yii2 自定义class、自定义全局函数(摘录)

1.在app\components下新建MyComponent.PHP namespace app\components; use Yii; use yii\base\Component; use yii\base\InvalidConfigException; class MyComponent extends Component { public function welcome() { echo "Hello..Welcome to MyComponent"; } } 2.在co

[moka同学笔记]yii2.0的下拉菜单与bootstrap下拉菜单

1.yii2下拉菜单 1 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">管理<b class="caret"></b></a> 2 <ul class="dropdown-menu"> 3 <li&

[moka同学笔记]Yii2.0给一张表中增加一个属性

1.model中建立关联 public function getUser(){ return$this->hasOne(User::className(),['id'=>'uid']) ; } 2.在视图中 <?= GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ // ['class' => 'yii\grid\SerialColumn'], 取消掉编号 ['attribute'=&g

[moka同学笔记]yii2.0 dropdownlist的简单使用

1.controller控制中 $modelCountrytelCode = CountryTelCode::find()->orderBy('id DESC')->all(); $telCode = ArrayHelper::map($modelCountrytelCode,'area_code','name'); //显示name,传值area_code ***********其他代码************ return $this->render('createUser', [

[moka同学笔记]redis练习Demo

<?php /** * Created by PhpStorm. * User: moka同学 * Date: 2017/3/13 * Time: 10:54 */ echo 'Hello redis'.'<br>'; $redis = new Redis(); $redis->connect("127.0.0.1","6379"); //demo1 /*$redis->set("name","This i

[moka同学笔记]三、Yii2.0课程笔记(魏曦老师教程)

关联字段增加搜索 post表关联adminuser表,通过post.author_id  adminuser.id关联,在YII2.0生成搜索,关联字段搜索时,需要输入关联字段author的id才能搜索,这不符合我们的要求,我们要求输入作者名就可以搜索出来,该作者对应的post.

[moka同学笔记]WINDOWS中cmd的切换目录cd命令失效

症状: 解决办法: 二.解决问题 原因是没有切换盘符步骤一:C:\Users\Administrator>D:步骤二:D:\>

[moka同学笔记]window下.htacess文件 与linux下.htacess文件

windows下 # Turn on URL rewritingRewriteEngine On # Installation directoryRewriteBase / # Protect hidden files from being viewed<Files .*>    Order Deny,Allow    Deny From All</Files> # Protect application and system files from being viewedRewr