将CakePHP网站升级到PHP7

将CakePHP网站升级到PHP7,php,cakephp,basic-authentication,Php,Cakephp,Basic Authentication,我已经接管了一个为PHP5.4和Cake2.x编写的网站。我将PHP升级到7.2,将Cake升级到2.10。现在没有人可以登录。我开始调试,但我觉得自己像掉进了兔子洞。在FormAuthenticate::authenticate(CakeRequest$request,CakeResponse$response)中是语句$fields=$this->settings['fields']之后我添加了$ex=fopen('php://stderr","a",; fputs($ex,“fields=

我已经接管了一个为PHP5.4和Cake2.x编写的网站。我将PHP升级到7.2,将Cake升级到2.10。现在没有人可以登录。我开始调试,但我觉得自己像掉进了兔子洞。在
FormAuthenticate::authenticate(CakeRequest$request,CakeResponse$response)
中是语句
$fields=$this->settings['fields']之后我添加了
$ex=fopen('php://stderr","a",;
fputs($ex,“fields=”.json_encode($fields)。“\n”)哪个输出

fields={"username":"username","password":"password"}
而不是我在网页上输入的实际用户名和密码。我尝试用实际用户名和密码重新分配
字段
,但函数调用方法
\u checkFields
,该方法调用
$request->data
,返回空字符串


显然,我在这里采取了错误的方法。我在升级过程中做错了什么,或者遗漏了什么;不仅仅是更改
composer.json
和运行
composer更新
。有什么建议吗?

我通过将CakePHP降级到2.9.9版解决了这个问题。

字段
选项不包含任何用户数据,它是一个定义表单数据和数据库中字段名称的映射,请参阅。因此,如果表单和数据库字段的名称分别为
username
password
,则不要使用该选项,而是使用默认值。如果
$request->data
为空(我假设它实际上不是一个字符串,因为当它作为数组被访问时会产生一个错误-请确保启用了调试模式和错误报告),那么这就是您的问题,但这可能是由很多事情引起的(重定向、不发送数据、覆盖/删除数据等),这里的任何人都几乎不可能知道,您必须进行更多的调试以确定数据丢失的位置。Cake 2使用了PHP7.2中默认不支持的mcrypt,无论是使用PHP7.1还是安装mcrytI,我真不敢相信我必须对一个相当成熟的包进行这种低级调试。无论如何,我调试过。mcrypt已经安装,所以不是这样,但是谢谢你的建议,Nathaniel。
$request->data()
调用
CakeRequest::data()
,它返回(通过final语句)
Hash::get($this->data,$name)
。最终返回
$default
,即
null
。所以想必
$data
应该有一个键
User
,但它没有。所以我想我必须弄清楚
$request->data
如何不包含键
User
。我刚刚删除了供应商/(是的,由于某种原因,它是Vendor/在这个应用程序中)和composer重新安装。现在,在Hash::get中,
$data={“user”:null}
$path='user.email'
后面跟着
$data={“user”:null}
$path='user.password'