Laravel8中Handler类render方法与父类不兼容intelephense报错如何解决
问题原因
这个错误不是方法重叠导致的,是Laravel版本迭代后父类异常处理的render方法签名发生变更,子类重写的方法和父类签名不匹配触发的Intelephense类型校验错误。
Laravel 5.6版本中Illuminate\Foundation\Exceptions\Handler的render方法签名为:
public function render($request, Exception $exception)
从Laravel 7.0版本开始,该方法的第二个参数类型已经调整为Throwable,适配PHP的错误/异常统一捕获机制,Laravel 8.x沿用了这个签名:
public function render($request, Throwable $e)
你参考5.6的旧教程写的代码和Laravel 8的父类签名不一致,就会报1038兼容错误。
修复方案
只需要修改你自定义的render方法的参数类型即可,修改后的render方法代码如下:
public function render($request, Throwable $exception) { if($exception instanceof JWTException){ return response(['error' => 'Token is not provided'], 500); } return parent::render($request, $exception); }
注意:你贴出的代码中
$this->、=>属于HTML转义后的内容,实际编写代码时需要替换为正常的$this->、=>符号。
修改完成后Intelephense的报错就会消失,异常处理逻辑也可以正常运行。
内容的提问来源于stack exchange,提问作者Shironekomaru
相关产品推荐
相关产品推荐

