Laravel模型isExpired方法返回值类型不匹配报错如何解决?
问题修复方案
报错根因
你遇到的类型报错是因为PHP的原生返回类型声明规则写错了:PHP 中布尔值的原生类型声明为小写的bool,你写的boolean会被框架识别为当前命名空间下的类(刚好项目中引入了phpDocumentor的Boolean类型类,所以系统要求你返回该类的实例,而你返回了PHP原生布尔值,就触发了类型不匹配报错)。
另外代码还存在一处隐性拼写错误,会导致后续日期判断逻辑异常,需要同步修复。
具体修改点
- 修正
isExpired方法的返回类型声明,把: boolean改为: bool - 修正
$casts属性中的日期类型拼写,把datatime改为正确的datetime(原拼写多了一个字母a)
修复后完整的Panelfile模型代码
class Panelfile extends Model { protected $guarded = []; public function getLinkAttribute() { return $this->isExpired() ? null : $this->file; } public function isExpired() : bool { return Carbon::now()->gte($this->expiration); } protected $appends = ["link"]; protected $casts = [ 'expiration' => 'datetime:Y-m-d H:i:s', ]; }
修改后重新运行即可正常实现过期展示逻辑。
内容的提问来源于stack exchange,提问作者SinaValipour
相关产品推荐
相关产品推荐

