7 回答
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);
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 )!
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]);
}
TA贡献1812条经验 获得超5个赞
在我的例子中,Livewire 组件引用了一个具有自定义属性的模型,该属性是使用Carbon::now()
因此,每次组件尝试水合时,该属性都有不同的值,因此被“损坏”。
- 7 回答
- 0 关注
- 151 浏览
添加回答
举报