yii2 model 验证规则rules 一条规则验证失败立即返回不继续验证其他字段 [ 2.0 版本 ]
Mode::rules();
public function rules()
{
[['username', 'password'], 'required'],
['age', 'required'],
// ......
}
username 为空立即返回error ,不去验证password和age。同理age如果为空,也不会去验证其他字段
不知道yii2这块有没有这种配置?
sturn 补充于 2016-07-25 21:29
感谢楼上all同学的回答,我这边重写了Model类解决了,另外我要这样的验证是专给api使用。
共 9 个回答
-
sgj773624926 回答于 2016-07-24 19:31 举报
之前看错问题了。。。
暂时删掉了之前的答案 -
如果不嫌麻烦可以在每一个验证后面加上when,代码可以这样写
[['email_attribute'], 'email', 'when' => function ($model) { return !$model->hasErrors(); }],
一般针对需要复杂验证(如:访问DB),简单的验证就算了吧
共 1 条回复sturn 觉得很赞 -
heisenberg 回答于 2018-07-12 16:20 举报
/** * 由于 Yii 是循环验证的,作为API时,当一个错误出现时,应该终止验证。 * !$this->hasErrors() 在已有错误时,终止验证,可以调高效率(特别是下面的SQL查询)。 */ if (!$this->hasErrors() && !Common::isPhone($this->phone)) { $this->addError('phone', '格式错误'); }
heisenberg 觉得很赞 -
比如我的解决办法是,model和AR模型都需要用到这个功能,那么我在common/traits目录下新建了个ModelTrait.php文件
内容是
`<?phpnamespace common\traits;
trait ModelTrait
{/** * 获取验证的第一条错误信息 */ public function fail($delferror = '') { $error = $this->getErrors(); if ($error) { reset($error); return current($error)[0]; } return $delferror; }
}
然后在model或ar使用
<?phpnamespace common\base;
use common\traits\ModelTrait;
class BaseAr extends \yii\db\ActiveRecord
{use ModelTrait;
}`
最后的效果是
共 1 条回复 -
wangzhoubin 回答于 2020-04-26 10:24 举报
skipOnError
sturn
注册时间:2012-01-29
最后登录:2020-04-02
在线时长:50小时6分
最后登录:2020-04-02
在线时长:50小时6分
- 粉丝5
- 金钱405
- 威望0
- 积分905