如题,禾匠小程序 2.9.35 项目使用 yii2 2.0.5 版本,在 linux 服务器 php 5.6 的环境下运行良好,当转战到本地安装后(win7 xampp php 7.3.2),跳转子商城管理后台时报错:

PHP Warning – yii\base\ErrorException
count(): Parameter must be an array or an object that implements Countable

1. in D:\Projects\webservice_xcx\vendor\yiisoft\yii2\db\QueryBuilder.php  at line 1249
...
if ($column instanceof \Traversable || count($column) > 1) {
...

从错误等级来看,这只是一个警告,之所以抛出警告,是因为本地设置的 debug 模式有关,具体设置项位于 .env 文件中:

...
## 常量(可选值 true / false)
YII_DEBUG=true
## 常量(可选值 "dev" / "test" / "prod")
YII_ENV="dev"
...

.env.example 文件复制而来的 .env 本地环境配置文件默认开启 debug 模式。将 YII_DEBUG 常量设置为 false 来关闭 debug 模式即可。

但人并不是这么容易满足的,关闭 debug 模式是中下的选择,有没有修正这个警告的方法呢?

当然有。根据字面意思就是这个位置的 count 方法传入参数不是一个实现了 Countable 接口的数组或者对象。那么加一个是否实现 Countable 接口的逻辑判断即可:

...
if ($column instanceof \Traversable || ($column instanceof \Countable && count($column) > 1)) {
...

最初的想法是升级 yiisoft/yii2 的版本(修改 composer.json 中的版本号,然后 composer update yiisoft/yii2 单独更新),但直接给我一个错误:Your requirements could not be resolved to an installable set of packages.,想想还是算了。