1、当在登录页面输入不存在的用户名密码时提交时返回以下结果,那么是为什么呢?
2、代码分析
try { // 判定username password $user = model('AdminUser')->get(['username' => $data['username']]); if (!$user || $user->status != config('code.status_normal')) { $this->error('该用户不存在'); } } catch (\Exception $e) { $this->error($e->getMessage()); }
这里程序走到了 $this->error('该用户不存在'); 那么我们看源码里有这样一段代码
throw new HttpResponseException($response);
class HttpResponseException extends \RuntimeException { /** * @var Response */ protected $response; public function __construct(Response $response) { $this->response = $response; } public function getResponse() { return $this->response; } }
这里的 HttpResponseException 继承了 RuntimeException类,而RuntimeException类 继承了Exception类。这里需要php的异常处理的基础知识。
当php的语法错误或者内部错误的时候,会自动给到Exception中的 $message属性,而我们这里是程序上的逻辑错误,并没有给到 $message。
当执行到 HttpResponseException 的时候,就会直接走 catch 中的Exception,自然就是空值了。
3、验证一下
把
throw new HttpResponseException($response);
修改为
throw new HttpResponseException($response, $msg);
HttpResponseException 类中构造方法修改为
public function __construct(Response $response, $message) { $this->response = $response; $this->message = $message; }
执行代码:
知道了是为什么?那么我们不需要修改源码,可以这样写:
try { // 判定username password $user = model('AdminUser')->get(['username' => $data['username']]); if (!$user || $user->status != config('code.status_normal')) { //exception('该用户不存在'); // 方式1。 //throw new Exception('该用户不存在');// 方式2. } } catch (\Exception $e) { $this->error($e->getMessage()); }
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦