Mar*_*ler 5 php laravel laravel-livewire
我收到以下错误并且有点迷失:
Livewire 在尝试对 ... 组件进行水合时遇到损坏的数据。确保 Livewire 组件的 [name, id, data] 在请求之间没有被篡改
情况如下:Livewire 2.x,Laravel 7.x,Component Controller 从 3 个 MySQL Stored Procedures 中获取数据并进行处理。组件刀片是一个非常基本的刀片,带有 foreach 循环。我正在使用 wire:init 功能,以便组件不会阻止页面加载。它包含一个定制的分页。切换到第二页数据时,出现这个错误。它在 Livewire 1.x 上没有出错。
有没有人知道如何解决这个问题?错误本身对我来说并没有多大意义。需要任何其他信息吗?
在此先感谢您,感谢您的帮助!
Mar*_*ler 18
在我的情况下,解决方案是保护公共财产并手动将其传递给刀片,因此它被排除在 Livewire 引擎盖下的自动处理之外。
cby*_*016 15
要解决此问题,请打开vendor/livewire/livewire/src/ComponentChecksumManager.php 文件并var_dump($stringForHashing);在第19 行return 语句之前添加。然后,您可以看到正在散列的数据,并将其与之前的散列数据进行比较,以找出差异。
完成此操作后,我能够识别 javascript 重新排列的数字键并提出适当的修复方法。
需要注意的一件事是,某些 json 格式化程序也会对数字键重新排序,因此最好在不格式化或手动格式化的情况下比较 json。
编辑:使用 var_dump 可能会干扰某些页面的功能,因此将数据写入文件可能是更好的选择:
file_put_contents('/path/to/log.txt', $stringForHashing . "\n\n", FILE_APPEND);
Run Code Online (Sandbox Code Playgroud)
无论如何,我们的问题是一个非常大的整数,大于 javascript 通过 Number.MAX_SAFE_INTEGER 可以处理的整数。
\n我们在这里填写了错误报告:https://github.com/livewire/livewire/discussions/4788 (livewire 2.10.4)。
\n因此,当使用太大的整数时,没有解决错误本身的方法。如果您想将您的值视为真正的整数,您\xe2\x80\x99 现在运气不佳,但也许转换为字符串可能适合您。(和/或在 php 端 \xe2\x80\x93 上使用受保护的属性 \xe2\x80\x93 进行计算(如果 \xe2\x80\x99s 在您的情况下可行)。
\n话虽这么说,我们问题的真正原因是 uuid 转换为 int,因为我们没有填充protected $keyType = \'string\';Laravel 模型的 ( https://laravel.com/docs/9.x/eloquent#primary-keys )!
| 归档时间: |
|
| 查看次数: |
6528 次 |
| 最近记录: |