دليل Livewire PHP الشامل: أمثلة وتطبيقات عملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Livewire لـ PHP: الدليل الشامل

1. ما هو Livewire ولماذا نستخدمه؟

Livewire هي مكتبة متكاملة لإطار Laravel، تتيح لك إنشاء واجهات مستخدم ديناميكية وتفاعلية دون الحاجة لكتابة أي كود JavaScript. تعمل هذه المكتبة من جانب الخادم، وتستخدم Alpine.js لتحديث DOM، بينما يبقى كل المنطق في PHP. إنها الأداة المثالية للمطورين الذين يرغبون في بناء تطبيقات ويب تفاعلية بسرعة، دون التعمق في أطر العمل الأمامية المعقدة.

الهدف الأساسي لـ Livewire هو تبسيط تطوير واجهات الويب الحديثة، مع الحفاظ على نهج Laravel المألوف. أنت تكتب المكونات (Components) بلغة PHP، وتقوم Livewire تلقائياً بمعالجة طلبات AJAX، وتحديث DOM، وإدارة الحالة. هذا مفيد بشكل خاص للنماذج، لوحات التحكم، غرف الدردشة، وأي عناصر تفاعلية أخرى.

تحل المكتبة مشكلة تكرار الكود بين الواجهة الأمامية والخلفية، مما يسمح للمطورين بالتركيز على منطق التطبيق بدلاً من إعداد WebSocket أو مكتبات JavaScript المعقدة. Livewire مثالية للمشاريع التي تهم فيها سرعة التطوير وسهولة الصيانة.

2. التثبيت

لتثبيت Livewire، استخدم Composer - مدير الحزم القياسي لـ PHP. نفّذ الأمر التالي في المجلد الرئيسي لمشروع Laravel الخاص بك:

composer require livewire/livewire

بعد التثبيت، ستقوم Livewire تلقائياً بتسجيل موفري الخدمات الخاصين بها. إذا كنت تستخدم Laravel 8 أو إصدار أحدث، فلا حاجة لتكوين إضافي. للإصدارات الأقدم، قد تحتاج إلى إضافة السطر التالي في ملف config/app.php:

'providers' => [
    // ...
    Livewire\LivewireServiceProvider::class,
];

تأكد أيضاً من تضمين أكواد CSS و JavaScript الخاصة بـ Livewire في القالب الخاص بك (عادةً layouts/app.blade.php):

@livewireStyles
</head>
<body>
    @livewireScripts
</body>

3. البداية السريعة - مثال عملي بسيط

لنقم بإنشاء مكون عداد بسيط. أولاً، نفّذ أمر artisan التالي:

php artisan make:livewire counter

سيؤدي هذا إلى إنشاء ملفين: app/Http/Livewire/Counter.php و resources/views/livewire/counter.blade.php. لنقم بتعديل كلاس PHP:

<?php
namespace App\Http\Livewire;
use Livewire\Component;

class Counter extends Component
{
    public $count = 0;

    public function increment()
    {
        $this->count++;
    }

    public function render()
    {
        return view('livewire.counter');
    }
}
<div>
    <h1>{{ $count }}</h1>
    <button wire:click="increment">+1</button>
</div>

الآن، قم بإدراج المكون في أي صفحة Blade:

<livewire:counter />

تم! عند الضغط على الزر، سيزداد العداد دون إعادة تحميل الصفحة.

4. الدوال / الوظائف / الكلاسات الأساسية

4.1. render()

التوقيع: public function render(): View

الوصف: دالة إلزامية تقوم بإرجاع قالب Blade الخاص بالمكون. يتم استدعاؤها في كل مرة يتم فيها عرض المكون.

public function render()
{
    return view('livewire.my-component', ['data' => $this->getData()]);
}

4.2. mount()

التوقيع: public function mount(...$params): void

الوصف: تشبه دالة البناء (Constructor)، يتم استدعاؤها مرة واحدة عند أول عرض للمكون. تُستخدم لتهيئة الخصائص.

public $userId;
public $user;

public function mount($userId)
{
    $this->userId = $userId;
    $this->user = User::find($userId);
}

توصيات