琯琯博客 纸上得来终觉浅,绝知此事要躬行。

Yii2 学习笔记之场景应用

琯琯
2017-01-25
PHP  Yii
 

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

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

(完)


相关文章

评论

内容导航