Laravel8+PHP8环境count()参数为string类型报错如何解决
问题根因
报错是因为app/Models/user.php中的$fillable属性被错误定义为字符串类型,Laravel框架要求$fillable必须为数组格式。报错行GuardsAttributes.php:235执行count($this->getFillable())逻辑时,PHP 8.0+ 对count()参数做了强类型校验,仅允许传入数组或Countable类型的参数,传入字符串就会触发你遇到的TypeError。
不要修改vendor目录下的Laravel框架源码,该问题完全是业务代码配置错误导致的,修改框架源码会带来后续版本升级的兼容隐患。
修复操作步骤
- 打开项目下的
app/Models/user.php文件 - 将原有
protected $fillable = 'name';代码修改为数组格式,根据你的业务需求补充所有需要批量赋值的字段(登录场景通常需要email、password等字段),示例修改后代码如下:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class user extends Model { use HasFactory; protected $fillable = ['name', 'email', 'password']; }
- 重新测试登录逻辑即可恢复正常
内容的提问来源于stack exchange,提问作者TETSU
相关产品推荐
相关产品推荐

