Laravel Toggle: فیچر فلگ ساده برای لاراول
خلاصهٔ کاملتر
Laravel Toggle یه پکیج فیچر فلگ (Feature Flag) برای لاراوله که عمداً ساده طراحی شده. فیچر فلگ یه مکانیزمه که بهت اجازه میده یه قابلیت رو بدون تغییر کد فعال یا غیرفعال کنی. پکیج اولپارتی لاراول به اسم Pennant برای rollout تدریجی و A/B تست روی کاربران خاص ساخته شده، ولی Laravel Toggle این پیچیدگیها رو کنار میذاره و فقط یه سوئیچ ساده روشن/خاموش میده.
فلگها داخل فایل config/toggle.php تعریف میشن و میتونن مقدارشون رو از متغیرهای محیطی بخونن. برای چک کردن وضعیت یه فلگ از فاساد Toggle استفاده میکنی:
'flags' => [
'comments' => env('TOGGLE_COMMENTS', true),
'related-articles' => env('TOGGLE_RELATED_ARTICLES', false),
],با Toggle::active() میتونی رفتار اپ رو شاخهبندی کنی و با Toggle::inactive() هم میشه کدی رو که فقط وقتی فیچر خاموشه باید اجرا بشه، guard کرد. در Blade هم دایرکتیوهای اختصاصی @toggle و @elsetoggle و @endtoggle وجود دارن که نیازی به نوشتن دستی @if نیست. اگه هم بخوای اسم فلگها رو type-safe نگه داری، میتونی از یه backed enum استفاده کنی تا autocompletion داشته باشی.
این پکیج دو درایور داره که با TOGGLE_DRIVER انتخاب میشن: درایور config که فقطخواندنیه و مقادیر رو از env میگیره، و درایور database که خواندنونوشتنیه و اول دیتابیس رو چک میکنه، اگه رکوردی نبود به مقدار config برمیگرده. میتونی هم ترکیبی از هر دو داشته باشی؛ فلگهای پایدار توی .env بمونن و فلگهای عملیاتی از دیتابیس کنترل بشن.
با درایور دیتابیس میشه فلگها رو در زمان اجرا با Toggle::enable() و Toggle::disable() تغییر داد — مثلاً یه ادمین میتونه بنر خبر فوری رو بدون دیپلوی روشن کنه. لوکاپها کَش میشن و میتونی store کَش و TTL رو تنظیم کنی. مدل Eloquent پکیج هم بهطور خودکار کَش رو موقع ذخیره یا حذف رکورد پاک میکنه.
برای اپهایی که از Inertia.js استفاده میکنن، میدلور ShareTogglesWithInertia همه فلگها رو بهعنوان prop flags به فرانتاند (Vue، React، Svelte) میفرسته، بدون اینکه نیاز به API call جداگانهای باشه. چند دستور Artisan هم برای مدیریت روزانه وجود داره: toggle:list برای دیدن وضعیت همه فلگها، toggle:create برای ساختن فلگ جدید، و toggle:cache-clear برای پاک کردن کَش.
نکات کلیدی:
- فقط سوئیچ ساده روشن/خاموش — بدون user segmentation یا A/B تست
- دو درایور config (فقطخواندنی) و database (قابل تغییر در runtime) دارد
- میشه هر دو درایور رو همزمان در یه اپ استفاده کرد
- Blade دایرکتیو، enum support، Inertia middleware و Artisan commands داره
- کَشینگ با پاکسازی خودکار هنگام تغییر رکورد دیتابیس




