اگر از livewire زیاد استفاده میکنید حتما به این خطا برخورد کرده اید، خطایی که باعث شده شاید به این فکر کنید که چرا دارم از livewire استفاده میکنم و باید بذارمش کنار! ولی یک لحظه صبر کنید! قبل از مهاجرت از livewire این متن رو بخونید:
ما همه php رو به عنوان زبانی میشناسیم که به نوع داده ها اهمیتی نمیده و شما میتونید متغیرها رو بدون مشخص کردن نوع آن تعریف کنید اما گویا livewire اینطور نیست، تا اونجایی که من فهمیدم livewire بین هر درخواست چک میکنه که داده ها به صورت غیرمجاز تغییر نکرده باشند و این چیز خوبیه اما تو این چک کردن 0 با "0" فرق میکنه و اگه نوع این داده متفاوت باشه خطای تغییر غیرمجاز میده
این خطا اغلب روی داده های آرایه ای رخ میده و کلیدهای همنام باید نوع داده یکسانی داشته باشند مثلا:
$amountsData = [
"discount"=>0.0,
...
];
این آرایه یک کلید برای تخفیف داده که به صورت عددی ذخیره شده و ما در همین کامپوننت یک آرایه دیگه ای داریم که همین کلید رو داره:
$totalData = [
"discount"=>"0.0",
...
];
این خطاست!! درسته که دوتا آرایه مختلف داریم که به ظاهر هیچ ربطی به هم ندارند ولی livewire این موضوع براش مهم هست پس خطا میده که:
Livewire encountered corrupt data when trying to hydrate a component. Ensure that the [name, id, data] of the Livewire component wasn't tampered with between requests
حالا کافیه یکی از این دو داده را به نوع مقابلش تبدیل کنید:
اگه از sql استفاده میکنید میتونید رشته رو با استفاده از این متد به عدد تبدیل کنید:
DB::raw('CAST(discount AS DECIMAL(10,2)) as discount')
البته همیشه این خطا بابت این موضوع نیست ولی بیشتر اوقات همینه...
امیدوارم که مفید باشه