菜鸟常忽略的地方 - 正确地设定load失败的提示信息 ¶
作者:KK
发表日期:2017.4.12
模型的errors来自addError ¶
平时大家都有用过这样的代码来在validate失败的时候打印错误信息:
if(!$model->validate()){
print_r($model->errors);
}
相信大家也尝试过自己定义验证规则,在这里已经知道可以自己addError来添加错误
可是许多菜鸟可能不知道,$model->errors
的错误来源其实完全来自addError,如果没有执行过addError那是绝对不会产生errors的
所以load失败的时候不会有errors ¶
在load数据失败这里我简单示例过load的源码工作逻辑,可以发现这里完全没有执行过addError
所以有时候菜鸟们会这样写代码,其实是错的:
if(!$model->load(Yii::$app->request->post()) || $model->validate()){
print_r($model->errors);
}
因为如果load失败了也进入了if,此时errors是空的——因为load从来没有addError嘛
正确姿势 ¶
将load和validate的判断分开,单独为load失败设定错误消息
if(!$model->load(Yii::$app->request->post())){
throw new yii\base\UserException('接收参数失败');
}
if(!$model->validate())){
print_r($model->errors);
}