升级到 cakephp 4 后,当我尝试执行任何查询时出现此错误:
Cake\Database\TypeFactory::build()的返回值必须实现接口Cake\Database\TypeInterface,返回App\Database\Type\CryptedType的实例
该错误表明您的自定义数据库类型类
\App\Database\Type\CryptedType
未实现所需的接口\Cake\Database\TypeInterface
。
从 CakePHP 4.0 开始,数据库类型类不应再扩展
\Cake\Database\Type
,它已被弃用,并将在 5.x 中完全删除。目前,\Cake\Database\Type
是\Cake\Database\TypeFactory
的别名,它不实现该接口。
您的自定义类型类现在应该扩展
\Cake\Database\Type\BaseType
,或者直接实现接口。
另请参阅
检查您的 boostrap.php 升级后可能正在使用旧类型
Type::build('time');
Type::build('timestamp');
Cake\I18n\Date::setToStringFormat('dd/MM/yyyy');
Cake\I18n\FrozenDate::setToStringFormat('dd/MM/yyyy');
Type::build('date')
->useLocaleParser()
->setLocaleFormat('dd/MM/yyyy');
Type::build('datetime')
->useLocaleParser()
->setLocaleFormat('dd/MM/yyyy HH:mm:ss');
尝试清除缓存
bin/cake cache clear_all