为了账号安全,请及时绑定邮箱和手机立即绑定

Livewire 在尝试水合......组件时遇到损坏的数据

Livewire 在尝试水合......组件时遇到损坏的数据

PHP
墨色风雨 2024-01-19 15:25:19
我收到以下错误并且有点迷失:Livewire 在尝试水合……成分时遇到了损坏的数据。确保 Livewire 组件的 [name, id, data] 在请求之间未被篡改情况如下:Livewire 2.x,Laravel 7.x,组件控制器从3个MySQL存储过程中获取数据并进行处理。Component Blade 是一个带有 foreach 循环的非常基本的刀片。我正在使用wire:init 功能,以便组件不会阻止页面加载。它包含一个定制的分页。当切换到第二页数据时,就会出现这个错误。在 Livewire 1.x 上它没有出错。有谁知道如何解决这个问题?这个错误本身对我来说并没有多大意义。需要任何额外信息吗?预先感谢您,感谢您的帮助!
查看完整描述

7 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

就我而言,解决方案是保护公共财产并将其手动传递给刀片,因此它被排除在 Livewire 的自动处理之外。



查看完整回答
反对 回复 2024-01-19
?
智慧大石

TA贡献1946条经验 获得超3个赞

要解决此问题,请打开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);


查看完整回答
反对 回复 2024-01-19
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

无论如何,我们的问题是一个非常大的整数,大于 javascript 通过 Number.MAX_SAFE_INTEGER 可以处理的整数。

我们在这里填写了错误报告:https://github.com/livewire/livewire/discussions/4788 (livewire 2.10.4)。

因此,当使用太大的整数时,没有解决错误本身的方法。如果您想将您的值视为真正的整数,那么您现在运气不佳,但也许转换为字符串可能适合您。(和/或在 php 端进行计算 - 使用受保护的属性 - 如果在您的情况下可行)。

话虽这么说,我们问题的真正原因是 uuid 转换为 int,因为我们没有填充protected $keyType = 'string';Laravel 模型的 ( https://laravel.com/docs/9.x/eloquent#primary-keys )!


查看完整回答
反对 回复 2024-01-19
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

我运行以下命令然后它解决了

php artisan 优化


查看完整回答
反对 回复 2024-01-19
?
www说

TA贡献1775条经验 获得超8个赞

除了上面其他人建议的之外,如果您有一个使用groupBy()可能是此问题原因的集合,也可能会发生这种情况,


要修复此问题,请protected $attribute在组件中使用,而不是public传递$attribute到组件视图。


protected $attribute;


public function mount($attribute){

   $this->attribute = $attribute;

}


...........


public function render()

{

    return view('livewire.view-here',['attribute'=>$attribute]);

}


查看完整回答
反对 回复 2024-01-19
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

在我的例子中,Livewire 组件引用了一个具有自定义属性的模型,该属性是使用Carbon::now()

因此,每次组件尝试水合时,该属性都有不同的值,因此被“损坏”。


查看完整回答
反对 回复 2024-01-19
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

我这样做了,它对我有用:

php artisan config:cache
php artisan config:clear


查看完整回答
反对 回复 2024-01-19
  • 7 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信