版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
一、使用场景
登录和注册时在不同的场景下, 我们可能会使用不同的业务规则和逻辑, 例如 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非必填