العودة للمقالات
2026-07-04 Abdelrhman Yasser

محرك Blade ووراثة القوالب: بناء واجهات ديناميكية

محرك Blade ووراثة القوالب: بناء واجهات ديناميكية

مدة القراءة: 30 دقيقة

مقدمة

Blade في Laravel ليس مجرد محرك قوالب آخر — إنه مُجمّع (Compiler) مصمم بعناية يحول قوالب PHP العادية إلى ملفات عرض محسّنة ومخزنة مؤقتاً. على عكس محركات القوالب الأخرى في PHP التي تقيد ما يمكنك فعله، يمكّنك Blade بصياغة نظيفة ومعبرة مع إعطائك كامل قوة PHP عندما تحتاجها.

كيف يعمل Blade: بنية المُجمّع (Compiler)

graph TD
    A[قالب Blade] --> B[مُجمّع Blade]
    B --> C[عرض مُجمّع]
    C --> D[مخزن في storage/framework/views]
    D --> E[تضمين PHP]
    E --> F[HTML مُنشأ]

عند استدعاء view('users.index', $data)، يقوم Laravel بـ:

  1. حل مسار العرض من resources/views/users/index.blade.php
  2. فحص التخزين المؤقت — إذا كان الإصدار المُجمّع موجوداً وأحدث من المصدر، تخطّى التجميع
  3. تجميع — يحول مُجمّع Blade القالب إلى PHP خام
  4. تخزين مؤقت — يُحفظ الـ PHP المُجمّع في storage/framework/views/
  5. عرض — يتم تضمين PHP المُجمّع وتنفيذه

مكونات Blade

المكونات المجهولة (Anonymous)

{{-- resources/views/components/alert.blade.php --}}
@props(['type' => 'info', 'message'])

<div class="alert alert-{{ $type }}">
    {{ $message }}
</div>

الاستخدام:

<x-alert type="success" message="تمت العملية بنجاح!" />

المكونات الكلاسية (Class)

php artisan make:component Alert
class Alert extends Component
{
    public function __construct(
        public string $type = 'info',
        public string $message = '',
    ) {}

    public function render(): View
    {
        return view('components.alert');
    }
}

الفتحات (Slots)

<x-card>
    <x-slot:header>
        <h2>الملف الشخصي</h2>
    </x-slot:header>

    <p>مرحباً بعودتك، {{ $user->name }}!</p>

    <x-slot:footer>
        <a href="/profile">عرض الملف</a>
    </x-slot:footer>
</x-card>

حقيبة الخصائص (Attribute Bags)

@props(['variant' => 'primary'])

<button {{ $attributes->merge([
    'class' => "btn btn-{$variant}",
    'type' => 'button',
]) }}>
    {{ $slot }}
</button>

توجيه @aware

يسمح @aware للمكون الابن بالوصول إلى خصائص المكون الأب:

{{-- components/form/index.blade.php --}}
@aware(['theme' => 'light'])
<div class="form form-{{ $theme }}">
    {{ $slot }}
</div>

المكونات الديناميكية

@foreach($widgets as $widget)
    <x-dynamic-component
        :component="'widgets.' . $widget->type"
        :data="$widget->data"
    />
@endforeach

توجيهات Blade المخصصة

Blade::directive('datetime', function (string $expression): string {
    return "<?php echo (\$expression)?->format('Y-m-d H:i:s'); ?>";
});

Blade::if('admin', function (): bool {
    return auth()->check() && auth()->user()->isAdmin();
});

أفضل الممارسات

  1. استخدم المكونات بدلاً من @include — المكونات لها نطاق بيانات خاص
  2. اجعل العروض "غبية" — ادفع المنطق إلى view composers أو accessors
  3. حمّل العلاقات مسبقاً في التحكمات — لا تستعلم داخل حلقات Blade
  4. خزّن مؤقتاً في الإنتاج — شغّل view:cache أثناء النشر
  5. استخدم @aware للسياق — تجنب تمرير نفس الخاصية يدوياً عبر المكونات المتداخلة

متى لا تستخدم Blade

  • بناء API — استخدم API resources
  • تطبيقات الوقت الفعلي — فكر في Inertia.js أو Livewire
  • تطبيقات الصفحة الواحدة (SPA) — استخدم إطار SPA مع Laravel كخلفية

الخلاصة

Blade أكثر من مجرد محرك قوالب بسيط. بنية المُجمّع، ونظام المكونات، وإمكانيات التخصيص تجعله واحداً من أقوى محركات قوالب PHP المتاحة. بإتقان وراثة القوالب، والمكونات، والفتحات، والتوجيهات المخصصة، يمكنك بناء عروض نظيفة وقابلة للصيانة وعالية الأداء.

مقالات ذات صلة

# Laravel# PHP# Blade# Frontend# Templating
WhatsApp
تواصل عبر واتساب