فهم ميزات الأعلام (Feature Flags) في Laravel #
ميزات الأعلام، والمعروفة أيضًا بـ "feature toggles"، هي تقنيات قوية في تطوير البرمجيات الحديثة تسمح لك بتشغيل أو إيقاف وظائف محددة في تطبيقك دون الحاجة إلى نشر كود جديد. يوفر هذا مرونة هائلة لاختبارات A/B، وعمليات الطرح التدريجي (الإطلاق الخفي)، ومفاتيح الإيقاف الطارئة، وتخصيص تجارب المستخدمين.
Laravel Toggle هي حزمة خفيفة الوزن مصممة لتوفير هذه القدرة الأساسية لتطبيقات Laravel الخاصة بك بأقل قدر من التعقيد. تمكنك من التحكم في الميزات عالميًا باستخدام متغيرات البيئة، أو قاعدة البيانات الخاصة بك، أو مزيج من الاثنين معًا، مما يوفر حلاً قويًا وبسيطًا لإدارة ميزات التطبيق.
في هذا البرنامج التعليمي، سنرشدك خلال إعداد واستخدام Laravel Toggle لتنفيذ ميزات الأعلام في مشروع Laravel الخاص بك.
الخطوة 1: التثبيت #
الخطوة الأولى هي تثبيت Laravel Toggle عبر Composer. افتح سطر الأوامر في مجلد مشروع Laravel الرئيسي لديك وقم بتشغيل:
composer require staudenmeir/laravel-toggle
الخطوة 2: التهيئة (Configuration) #
بعد التثبيت، ستحتاج إلى نشر ملف تهيئة الحزمة. يتيح لك هذا تخصيص سلوكها، مثل اختيار المشغل (متغيرات البيئة أو قاعدة البيانات) وتحديد القيم الافتراضية.
php artisan vendor:publish --provider="Staudenmeir\LaravelToggle\LaravelToggleServiceProvider"
سيؤدي هذا الأمر إلى إنشاء ملف toggle.php في مجلد config الخاص بك. افتح config/toggle.php لمراجعة محتوياته:
return [
/*
|--------------------------------------------------------------------------
| Default Toggle Driver
|--------------------------------------------------------------------------
|
| This option controls the default toggle driver that will be used.
| Valid options are "env", "database", or "both".
|
*/
'driver' => env('TOGGLE_DRIVER', 'env'), // الافتراضي هو 'env'
/*
|--------------------------------------------------------------------------
| Toggle Default Value
|--------------------------------------------------------------------------
|
| This value will be returned when a toggle is not found.
|
*/
'default_value' => false,
/*
|--------------------------------------------------------------------------
| Database Table
|--------------------------------------------------------------------------
|
| This is the database table that will be used to store toggles.
|
*/
'table' => 'features',
];
يمكنك تغيير driver في ملف .env الخاص بك، على سبيل المثال: TOGGLE_DRIVER=database أو TOGGLE_DRIVER=both.
الخطوة 3: إعداد مشغل قاعدة البيانات (اختياري) #
إذا اخترت database أو both كمشغل لديك، فستحتاج إلى إنشاء جدول لتخزين ميزات الأعلام الخاصة بك. يوفر Laravel Toggle أمرًا مناسبًا لذلك:
php artisan toggle:table
php artisan migrate
سيؤدي هذا إلى إنشاء جدول features في قاعدة البيانات الخاصة بك مع أعمدة مثل name و active. يمكنك بعد ذلك إدارة ميزات الأعلام الخاصة بك مباشرة من هذا الجدول. على سبيل المثال، لتمكين ميزة تسمى new-dashboard:
INSERT INTO features (name, active, created_at, updated_at) VALUES ('new-dashboard', 1, NOW(), NOW());
أو برمجيًا:
// في seeder أو controller
\DB::table('features')->insert([
'name' => 'new-dashboard',
'active' => true,
'created_at' => now(),
'updated_at' => now(),
]);
الخطوة 4: تعريف واستخدام ميزات الأعلام #
الآن بعد تهيئة Laravel Toggle، يمكنك البدء في تعريف واستخدام ميزات الأعلام في جميع أنحاء تطبيقك.
4.1. استخدام متغيرات البيئة (المشغل: env أو both)
أبسط طريقة لتعريف علم هي من خلال ملف .env الخاص بك. قم ببادئة اسم العلم الخاص بك بـ TOGGLE_.
مثال: لإنشاء علم لـ "لوحة تحكم جديدة":
TOGGLE_NEW_DASHBOARD=true
TOGGLE_BETA_FEATURES=false
تذكر تشغيل php artisan config:clear إذا لم تنعكس تغييرات .env الخاصة بك على الفور في التهيئة المخزنة مؤقتًا.
4.2. الوصول إلى الأعلام في الكود الخاص بك
يوفر Laravel Toggle واجهة Facade للتحقق بسهولة من حالة الأعلام الخاصة بك.
use Staudenmeir\LaravelToggle\Facades\Toggle;
- التحقق مما إذا كانت الميزة قيد التشغيل (ON):
if (Toggle::on('new-dashboard')) { // عرض واجهة المستخدم الجديدة للوحة التحكم } - التحقق مما إذا كانت الميزة متوقفة (OFF):
if (Toggle::off('experimental-feature')) { // إخفاء الميزة التجريبية } - التحقق بقيمة افتراضية (إذا لم يتم العثور عليها في البيئة/قاعدة البيانات):
تغطيdefault_valueفيconfig/toggle.phpهذا، ولكن يمكنك أيضًا تمرير وسيطة ثانية صراحةً إلىon()أوoff()لتجاوز القيمة الافتراضية لهذا التحقق المحدد.// إذا لم يتم تعريف 'super-secret-feature' في أي مكان، فستعيد هذه القيمة true if (Toggle::on('super-secret-feature', true)) { // ... }
4.3. أمثلة عملية
-
في Controllers:
التحكم في المنطق أو تمرير المتغيرات إلى العروض بناءً على ميزات الأعلام.namespace App\Http\Controllers;use App\Http\Controllers\Controller; use Staudenmeir\LaravelToggle\Facades\Toggle;
class DashboardController extends Controller { public function index() { $showNewDashboard = Toggle::on('new-dashboard'); $showBetaFeatures = Toggle::on('beta-features');
return view('dashboard.index', compact('showNewDashboard', 'showBetaFeatures')); }}
-
في Blade Views:
عرض عناصر واجهة المستخدم بشكل مشروط.أهلاً بك في لوحة التحكم الخاصة بك
@if ($showNewDashboard)
أنت تشاهد تجربة لوحة التحكم الجديدة!{{-- تضمين مكون لوحة التحكم الجديدة --}}@else أنت تشاهد تجربة لوحة التحكم الكلاسيكية. جرب الجديدة!{{-- تضمين مكون لوحة التحكم القديمة --}}@endif @if (Toggle::on('beta-features'))
@endifميزات تجريبية (Beta) #
مرحباً بك في ميزاتنا التجريبية الحصرية!
{{-- ... محتوى بيتا آخر ... --}} -
في Routes (عبر Middleware):
تقييد الوصول إلى مسارات معينة بناءً على ميزات الأعلام.// web.php use Staudenmeir\LaravelToggle\Facades\Toggle;Route::middleware('web')->group(function () { // مسارات عامة Route::get('/', function () { return view('welcome'); });
// مسارات تتطلب ميزة 'new-dashboard' Route::middleware(function ($request, $next) { if (Toggle::on('new-dashboard')) { return $next($request); } // إذا كانت الميزة متوقفة، قم بإعادة التوجيه أو الإلغاء return redirect('/old-dashboard')->with('error', 'لوحة التحكم الجديدة غير نشطة بعد.'); })->group(function () { Route::get('/dashboard/new', [App\Http\Controllers\NewDashboardController::class, 'index'])->name('new.dashboard'); }); // مسارات أخرى تتطلب المصادقة Route::get('/dashboard/old', [App\Http\Controllers\OldDashboardController::class, 'index'])->name('old.dashboard');});
فوائد وحالات استخدام Laravel Toggle #
- التحكم في عمليات الإطلاق: تقديم ميزات جديدة لمجموعة صغيرة من المستخدمين قبل الإطلاق العام الكامل.
- اختبارات A/B: التبديل بسهولة بين إصدارات مختلفة من ميزة لاختبار تفاعل المستخدم وأدائه.
- مفاتيح الإيقاف الطارئة: تعطيل ميزة بها مشكلة بسرعة دون الحاجة إلى التراجع عن الكود أو إعادة النشر.
- فصل النشر عن الإصدار: نشر الكود الذي يحتوي على ميزات جديدة تكون معطلة في البداية، ثم تنشيطها عند الاستعداد.
- الميزات الموسمية: تشغيل/إيقاف الميزات للعطلات أو الحملات الخاصة.
الخاتمة #
يوفر Laravel Toggle طريقة مباشرة وفعالة لتنفيذ ميزات الأعلام في تطبيقات Laravel الخاصة بك. من خلال الاستفادة من متغيرات البيئة أو قاعدة البيانات، تكتسب تحكمًا كبيرًا في وظائف تطبيقك، مما يتيح عمليات نشر أكثر أمانًا، وتجارب مستخدم ديناميكية، وتحسين سير عمل التطوير. ابدأ بدمج ميزات الأعلام اليوم لفتح مستوى جديد من المرونة في مشاريع Laravel الخاصة بك!