tw1996
- tw1996 提出了问题高级版如何改成一个单一入口访问
- tw1996 2016-08-03 已签到连续签到1天,获得了5个金钱
- tw1996 2016-07-28 已签到连续签到1天,获得了5个金钱
- tw1996 2016-07-19 已签到连续签到2天,获得了10个金钱
- tw1996 2016-07-18 已签到连续签到1天,获得了5个金钱
- tw1996 回答了问题 yii2基础版怎么实现登陆注册啊
用高级版 ,自带登陆注册
- tw1996 2016-07-14 已签到连续签到2天,获得了10个金钱
附上一段代码,是在insert/update之前调用的validate函数,如下;注意其中的
if ($attributeNames === null) { $attributeNames = $this->activeAttributes(); }
这里的activeAttributes是当前的scenario所包含的属性,即 ['username', 'email', 'status'],接下来的校验之针对这几个属性做教研,不会针对password做校验。
public function validate($attributeNames = null, $clearErrors = true) { if ($clearErrors) { $this->clearErrors(); } if (!$this->beforeValidate()) { return false; } $scenarios = $this->scenarios(); $scenario = $this->getScenario(); if (!isset($scenarios[$scenario])) { throw new InvalidParamException("Unknown scenario: $scenario"); } if ($attributeNames === null) { $attributeNames = $this->activeAttributes(); } foreach ($this->getActiveValidators() as $validator) { $validator->validateAttributes($this, $attributeNames); } $this->afterValidate(); return !$this->hasErrors(); }
其中
$validator->validateAttributes($this, $attributeNames);
是获取当前scneriao的所有validator,然后利用这些validator对scenario包含的属性进行校验;根据你的设置,当前的validator是包含['password','check']
的,但是validator检验属性的时候是要检验validator指定的属性(password)和scnario属性(email,username...)的交集;所以实际上该validator啥也没做。
修改一下update需要检验的属性就可以了:$scenarios['update'] = ['username', 'email', 'status','password'];这样update场景下会执行pssword check和min validator恩恩,非常感谢.