Yii2.0 场景的使用实例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/m0_38004619/article/details/102383969

一、使用场景

登录和注册时在不同的场景下, 我们可能会使用不同的业务规则和逻辑, 例如 email 属性在注册时强制要求有,但在登陆时不需要。

二、实例

  • 控制器
<?php

namespace app\controllers;

use yii\web\Controller;
use app\models\User;

class PostController extends Controller
{
    public function actionLogin()
	{
	    $model = new User();
	    $model->setScenario('create'); //设置场景update(代表注册)和create(代表登录)

            return $this->render('login', [
                'model' => $model,
            ]);
	}
}
  • model
<?php

namespace app\models;

use yii\base\Model;

class User extends Model
{
    public $name;
    public $pwd;
    public $email;
    

    //规则
    public function rules()
    {
        return [
            [['name', 'pwd'], 'required', 'on' => ['create', 'update']],//调用场景用on关键字
            [['email'], 'required', 'on' => 'create'],//调用场景用on关键字
        ];
    }

    //场景设置
    public function scenarios()
    {
        return [
            'create' => ['name', 'pwd', 'email'],
            'update' => ['name', 'pwd'],
        ];
    }


}
  • login
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>

<?php $form = ActiveForm::begin(); ?>
    <?= $form->field($model, 'name') ?>
    <?= $form->field($model, 'pwd') ?>
    <?= $form->field($model, 'email') ?>
    <?= Html::submitButton('create') ?> 
<?php ActiveForm::end(); ?>

三、结果

  • 当$model->setScenario('create')时,三个选项必须输入,否则会有提示信息
  • 当$model->setScenario('update')时,name和pwd选项必须输入,email非必填

猜你喜欢

转载自blog.csdn.net/m0_38004619/article/details/102383969