Filament 5.8 با لود تنبل اسکیماها اومد
خلاصهٔ کاملتر
Filament نسخهٔ v5.8.0 رو منتشر کرده و اصلیترین قابلیتش متد deferLoading() روی Schema هست. تا الان فیلامنت همهٔ فیلدهای یه فرم رو تو لود اول صفحه رندر میکرد، حتی فیلدهای سکشنهای بسته یا تبهایی که شاید کاربر هیچوقت بازشون نکنه. حالا اون بخش اول یه نشانگر لودینگ نشون میده و وقتی وارد viewport (یعنی قسمت دیدهشدهٔ صفحه) شد، فقط همون بخش با یه درخواست جدا رندر میشه.
برای استفاده، بهجای آرایه یه شیء Schema به متد schema() کامپوننت پاس میدی:
Section::make('Customer details')
->schema(
Schema::make()
->components([TextInput::make('name')])
->deferLoading(),
)
->collapsed()تبها هم همینطورن: تب غیرفعال وقتی انتخاب بشه لود میشه و مرحلههای بعدی wizard وقتی کاربر بهشون برسه. آیتمهای repeater و بلاکهای builder هم میتونن اسکیماشون رو با تأخیر لود کنن که برای آیتمهای پیشفرض بسته به درد میخوره.
تو جدولها، متد persistGroupInSession() اضافه شده تا گروهبندی انتخابشده هم مثل sort و فیلترها تو session بمونه. یه hook از Livewire هم که بهخاطر اسم اشتباه هیچوقت اجرا نمیشد درست شده و حالا عوضکردن گروهبندی جدول رو به صفحهٔ اول برمیگردونه. defaultGroup() هم حالا آرگومان direction میگیره، درست مثل defaultSort()، پس دیگه گروهبندی پیشفرض همیشه صعودی نیست.
یه تغییر جالب دیگه hookهای چرخهٔ عمر تو traitهاست. قبلاً اگه یه trait متد afterSave() داشت و خود صفحه هم afterSave() تعریف میکرد، مال trait کلاً نادیده گرفته میشد. حالا میتونی اسم trait رو ته اسم hook بیاری، مثلاً afterSaveHandlesDrafts()، شبیه قرارداد boot{TraitName}() تو Eloquent. اول hook خود صفحه اجرا میشه، بعد hookهای traitها. این برای صفحههای panel و importerها کار میکنه.
چالش کد یکبارمصرف صفحهٔ لاگین هم تو کلاس MultiFactorChallenge جدا شده تا بتونی مثلاً قبل از یه عملیات خطرناک تو کامپوننتهای Livewire خودت فاکتور دوم بخوای. مستندات هشدار میده که ولیدیت یه اسکیمای خالی موفق حساب میشه، پس درست قبل از ولیدیشن دوباره hasEnabledProviders() رو چک کن.
بقیهٔ تغییرات: placeholder() برای statها وقتی مقدارشون خالیه، متدهای minHeight() و maxHeight() برای RichEditor و MarkdownEditor (حداقل پیشفرض 10rem).
exporterها هم حالا با override کردن getDownloader() میتونن downloader سفارشی داشته باشن. این برای هاستهایی مثل Laravel Vapor که پاسخ streamed فایلهای بزرگ رو بلاک میکنن به درد میخوره. یه تغییر دیگه هم تبدیل راهنماهای Laravel Boost فیلامنت به یه Agent Skill که فقط موقع کار روی کد فیلامنت لود میشه.
نکات کلیدی:
- متد deferLoading() روی Schema رندر سکشن، تب، مرحلهٔ wizard و آیتم repeater رو تا دیدهشدنش عقب میندازه.
- persistGroupInSession() گروهبندی جدول رو بین بازدیدها نگه میداره و defaultGroup() حالا direction میگیره.
- hookهایی مثل afterSaveHandlesDrafts() تو trait بعد از hook خود صفحه اجرا میشن و دیگه override نمیشن.
- کلاس MultiFactorChallenge درخواست فاکتور دوم رو تو کامپوننتهای دلخواه Livewire ممکن میکنه.
- Agent Skill فیلامنت با php artisan boost:install نصب میشه و boost:update بهتنهایی اضافهش نمیکنه.




