菜鸟常忽略的地方 - 正确地设定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);
}