如何在Yii Model的验证规则Rules中区分场景?

 
已邀请:

zkbhj - 凯冰科技站长

赞同来自:

可以使用Scenarios这个概念:
在Model中定义场景变量:
namespace app\models;

use yii\db\ActiveRecord;

class User extends ActiveRecord
{
[b]const SCENARIO_LOGIN = 'login';
const SCENARIO_REGISTER = 'register';
[/b]

public function scenarios()
{
return [
self::SCENARIO_LOGIN => ['username', 'password'],
self::SCENARIO_REGISTER => ['username', 'email', 'password'],
];
}
}

然后在相应的规则条目中,指定使用的场景名称:
public function rules()
{
return [
// username, email and password are all required in "register" scenario
[['username', 'email', 'password'], 'required', [b]'on' => self::SCENARIO_REGISTER],
[/b]

// username and password are required in "login" scenario
[['username', 'password'], 'required',[b] 'on' => self::SCENARIO_LOGIN],
[/b]
];
}

最后,在应用程序中初始化这个模块时,同时初始化所处的场景:
// scenario is set as a property
$model = new User;
[b]$model->scenario[/b] = User::SCENARIO_LOGIN;

// scenario is set through configuration
$model = new User(['scenario' => User::SCENARIO_LOGIN]);

参考地址:http://www.yiiframework.com/do ... .html

要回复问题请先登录注册