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 關注
- 280 瀏覽
添加回答
舉報