将 cakephp 3.10 升级到 cakephp 4 会抛出 Hash::insert() 错误

问题描述 投票:0回答:1

按照 CakePHP 手册中的所有迁移步骤,我最终在所有页面上都出现错误 500。 日志告诉我这一点:

> [Wed Jul 19 11:56:02.566953 2023] [proxy_fcgi:error] [pid 12776]
> [client 178.117.91.131:57762] AH01071: Got error 'PHP message: PHP
> Fatal error:  Uncaught TypeError: Argument 2 passed to
> Cake\\Utility\\Hash::insert() must be of the type string, int given,
> called in
> /var/www/clients/client0/web4/web/ID/vendor/cakephp/cakephp/src/Core/Configure.php
> on line 92 and defined in
> /var/www/clients/client0/web4/web/ID/vendor/cakephp/cakephp/src/Utility/Hash.php:316\nStack
> trace:\n#0
> /var/www/clients/client0/web4/web/ID/vendor/cakephp/cakephp/src/Core/Configure.php(92):
> Cake\\Utility\\Hash::insert()\n#1
> /var/www/clients/client0/web4/web/ID/vendor/cakephp/cakephp/src/Core/Configure.php(339):
> Cake\\Core\\Configure::write()\n#2
> /var/www/clients/client0/web4/web/ID/config/bootstrap.php(74):
> Cake\\Core\\Configure::load()\n#3
> /var/www/clients/client0/web4/web/ID/vendor/cakephp/cakephp/src/Http/BaseApplication.php(161):
> require_once('/var/www/client...')\n#4
> /var/www/clients/client0/web4/web/ID/src/Application.php(41):
> Cake\\Http\\BaseApplication->bootstrap()\n#5
> /var/www/clients/client0/web4/web/ID/vendor/cakephp/cakephp/src/Http/Server.php(10...'

由于我不知道 - 或看不到 - 在 Application.php 或 bootstrap.php 中调用哈希的位置,我不知道如何调试它。

php cakephp cakephp-4.x
1个回答
0
投票

php 越来越严格了。这不是 CakePHP 问题。您的问题是基于将 int 传递给不再接受 int 的函数。通常这些问题可以通过使用

(string)
转换为字符串来解决,例如:

$data = [];
$path = 3;
$values = 'your value';
Hash::insert($data, (string)$path, $values);

您的实际问题是在 bootstrap.php 第 74 行中,您调用

Configure::load()
,它调用
Configure::write()
,然后调用
Hash::insert()
,因此配置中的每个键(通常在
config/app.php
中)必须是字符串类型 ->在配置中的某个地方,您必须通过跳过键(数字数组)来拥有整数键或隐式整数键:

$config = [
    '3' => 'your value', // works
     (string)3 => 'your value', // works
     4 => 'your value', // doesn't work without warnings or errors
    ['3' => 'your value'], // doesn't work because the actual key would be an automatic numeric array index 
    '6' => ['3' => 'your value'], // works 
];

Configure::write($config);
© www.soinside.com 2019 - 2024. All rights reserved.