ما هو لارافيل؟
لارافيل (Laravel) هو إطار عمل مجاني ومفتوح المصدر لتطوير تطبيقات الويب بلغة PHP، أنشأه تايلور أوتويل في عام 2011. يتبع نمط المعمارية Model-View-Controller (MVC) ويوفر صياغة أنيقة ومعبرة تجعل تطوير الويب أسرع وأكثر متعة.
لماذا لارافيل؟ لارافيل هو حالياً أكثر إطارات عمل PHP شعبية، معروف بصياغته الأنيقة وتوثيقه الشامل ومجتمعه النشط. يشغل الآلاف من التطبيقات حول العالم، من الشركات الناشئة الصغيرة إلى الحلول المؤسسية.
الميزات الرئيسية للارافيل
- Eloquent ORM: تطبيق ActiveRecord جميل وبسيط للعمل مع قواعد البيانات
- قوالب Blade: محرك قوالب قوي مع وراثة القوالب
- وحدة Artisan Console: واجهة سطر أوامر لمهام التطوير الشائعة
- ترحيلات قاعدة البيانات: نظام تحكم في إصدارات بنية قاعدة البيانات
- المصادقة والتفويض: هيكلة مدمجة لمصادقة المستخدمين
- التوجيه: نظام توجيه أنيق ومعبر
- نظام الطوابير: واجهة موحدة لمعالجة المهام في الخلفية
- بث الأحداث: بث الأحداث في الوقت الفعلي باستخدام WebSockets
- الاختبار: تكامل PHPUnit ومساعدات الاختبار
فهم معمارية MVC
MVC (Model-View-Controller) هو نمط تصميم يفصل منطق التطبيق إلى ثلاثة مكونات مترابطة. يساعد هذا الفصل في تنظيم الكود ويجعل التطبيقات أكثر قابلية للصيانة.
نمط MVC في لارافيل
تدفق الطلب في لارافيل:
طلب المستخدم ← المسارات ← المتحكم ← النموذج ← قاعدة البيانات
↓
العرض ← المتحكم
↓
الاستجابة للمستخدم
1. النموذج (Model)
تمثل النماذج البيانات ومنطق الأعمال. في لارافيل، تتفاعل النماذج عادةً مع قاعدة البيانات باستخدام Eloquent ORM.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
// تحديد السمات التي يمكن تعيينها بشكل جماعي
protected $fillable = ['title', 'content', 'author_id'];
// تحديد العلاقة مع نموذج User
public function author()
{
return $this->belongsTo(User::class, 'author_id');
}
// دوال منطق الأعمال
public function publish()
{
$this->published_at = now();
$this->save();
}
}
2. العرض (View)
تتعامل طبقة العرض مع طبقة العرض التقديمي. في لارافيل، تُكتب العروض باستخدام محرك قوالب Blade وتُخزن في مجلد resources/views.
<!-- resources/views/articles/show.blade.php -->
<html>
<head>
<title>{{ $article->title }}</title>
</head>
<body>
<h1>{{ $article->title }}</h1>
<p>بواسطة {{ $article->author->name }}</p>
<div>{!! $article->content !!}</div>
</body>
</html>
3. المتحكم (Controller)
تتعامل المتحكمات مع طلبات المستخدم، وتتفاعل مع النماذج، وتُرجع العروض. تعمل كوسطاء بين النماذج والعروض.
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function show($id)
{
// استرجاع المقالة من قاعدة البيانات باستخدام النموذج
$article = Article::with('author')->findOrFail($id);
// إرجاع العرض مع البيانات
return view('articles.show', compact('article'));
}
public function store(Request $request)
{
// التحقق من صحة الطلب الوارد
$validated = $request->validate([
'title' => 'required|max:255',
'content' => 'required',
]);
// إنشاء مقالة جديدة باستخدام النموذج
$article = Article::create($validated);
// إعادة التوجيه مع رسالة نجاح
return redirect()
->route('articles.show', $article)
->with('success', 'تم إنشاء المقالة بنجاح!');
}
}
أفضل ممارسة: حافظ على متحكماتك نحيفة. يجب أن يكون منطق الأعمال في النماذج أو فئات الخدمات أو فئات الإجراءات. يجب أن تتعامل المتحكمات بشكل أساسي مع مخاوف HTTP مثل التحقق من الصحة وإعادة التوجيه وتنسيق الاستجابة.
النظام البيئي للارافيل
يوفر لارافيل نظاماً بيئياً غنياً من الحزم والأدوات الرسمية التي توسع وظائفه:
حزم لارافيل الرسمية
- Laravel Breeze: هيكلة مصادقة بسيطة (تسجيل الدخول والتسجيل وإعادة تعيين كلمة المرور)
- Laravel Jetstream: هيكلة مصادقة قوية مع الفرق والمصادقة الثنائية
- Laravel Sanctum: مصادقة رمز API لـ SPAs وتطبيقات الهاتف المحمول
- Laravel Passport: تطبيق خادم OAuth2 كامل
- Laravel Horizon: لوحة تحكم جميلة لمراقبة طوابير Redis
- Laravel Telescope: مساعد تصحيح أنيق للتطوير
- Laravel Octane: تعزيز الأداء باستخدام Swoole أو RoadRunner
- Laravel Sail: بيئة تطوير Docker
- Laravel Socialite: مصادقة OAuth مع Facebook وTwitter وGoogle وغيرها
Laravel Forge و Vapor
Laravel Forge: منصة إدارة الخوادم ونشر تطبيقات لارافيل. تقوم بتوفير ونشر التطبيقات على DigitalOcean وAWS وLinode وغيرها.
Laravel Vapor: منصة نشر بدون خادم لتطبيقات لارافيل، مدعومة بـ AWS Lambda.
هيكل مجلدات لارافيل
فهم هيكل مجلدات لارافيل أمر حاسم للتنقل وتنظيم تطبيقك:
laravel-app/
├── app/ # كود التطبيق الأساسي
│ ├── Console/ # أوامر Artisan
│ ├── Exceptions/ # معالج الاستثناءات
│ ├── Http/
│ │ ├── Controllers/ # المتحكمات
│ │ ├── Middleware/ # الوسيطات HTTP
│ │ └── Requests/ # طلبات النماذج
│ ├── Models/ # نماذج Eloquent
│ └── Providers/ # مزودو الخدمات
├── bootstrap/ # ملفات بدء تشغيل الإطار
├── config/ # ملفات التكوين
├── database/
│ ├── factories/ # مصانع النماذج
│ ├── migrations/ # ترحيلات قاعدة البيانات
│ └── seeders/ # بذور قاعدة البيانات
├── public/ # جذر مستند خادم الويب
│ ├── index.php # نقطة الدخول
│ └── assets/ # الأصول المجمعة
├── resources/
│ ├── css/ # ملفات CSS الخام
│ ├── js/ # ملفات JavaScript الخام
│ └── views/ # قوالب Blade
├── routes/
│ ├── web.php # مسارات الويب
│ ├── api.php # مسارات API
│ └── console.php # مسارات وحدة التحكم
├── storage/
│ ├── app/ # ملفات التطبيق
│ ├── framework/ # ملفات الإطار
│ └── logs/ # سجلات التطبيق
├── tests/ # الاختبارات الآلية
├── vendor/ # اعتماديات Composer
├── .env # تكوين البيئة
├── artisan # أداة Artisan CLI
└── composer.json # اعتماديات Composer
شرح المجلدات الرئيسية
app/Http/Controllers: يحتوي على جميع فئات المتحكمات التي تتعامل مع طلبات HTTP.
app/Models: يحتوي على جميع فئات نماذج Eloquent التي تمثل جداول قاعدة البيانات.
resources/views: يحتوي على جميع ملفات قوالب Blade لعرض HTML.
routes/web.php: يحدد جميع مسارات الويب لتطبيقك.
public/: المجلد الوحيد الذي يمكن الوصول إليه من الويب. يحتوي على نقطة الدخول index.php والأصول.
database/migrations: نظام التحكم في الإصدارات لمخطط قاعدة البيانات.
ملاحظة أمنية: لا تقم أبداً بإرسال ملف .env إلى نظام التحكم في الإصدارات! يحتوي على معلومات حساسة مثل بيانات اعتماد قاعدة البيانات ومفاتيح API. استخدم دائماً .env.example كنموذج.
أساسيات وحدة Artisan Console
Artisan هي واجهة سطر الأوامر في لارافيل. توفر العديد من الأوامر المفيدة للتطوير.
أوامر Artisan الشائعة
# عرض جميع الأوامر المتاحة
php artisan list
# بدء خادم التطوير
php artisan serve
# إنشاء متحكم جديد
php artisan make:controller ArticleController
# إنشاء نموذج جديد مع الترحيل
php artisan make:model Article -m
# تشغيل ترحيلات قاعدة البيانات
php artisan migrate
# التراجع عن آخر ترحيل
php artisan migrate:rollback
# إنشاء بذرة جديدة
php artisan make:seeder UserSeeder
# مسح ذاكرة التخزين المؤقت للتطبيق
php artisan cache:clear
# مسح ذاكرة التخزين المؤقت للتكوين
php artisan config:clear
# إنشاء رابط رمزي من public/storage إلى storage/app/public
php artisan storage:link
# الدخول إلى Tinker REPL (الغلاف التفاعلي)
php artisan tinker
نصيحة Tinker: استخدم php artisan tinker للتفاعل مع تطبيقك في بيئة REPL. إنه مثالي لاختبار النماذج والاستعلام عن قواعد البيانات وتصحيح الأخطاء دون كتابة مسارات مؤقتة.
إنشاء أوامر Artisan مخصصة
يمكنك إنشاء أوامر Artisan المخصصة الخاصة بك للمهام المتكررة:
# توليد أمر جديد
php artisan make:command SendNewsletterCommand
# ينشئ هذا app/Console/Commands/SendNewsletterCommand.php
دورة حياة طلب لارافيل
فهم كيفية معالجة لارافيل للطلب يساعدك على بناء تطبيقات أفضل:
1. نقطة الدخول (public/index.php)
↓
2. تهيئة إطار عمل لارافيل
↓
3. تحميل مزودي الخدمات
↓
4. توجيه الطلب
↓
5. تنفيذ الوسيطات
↓
6. الإرسال إلى المتحكم/الإغلاق
↓
7. توليد الاستجابة
↓
8. إرسال الاستجابة إلى المتصفح
مزودو الخدمات
مزودو الخدمات هم المكان المركزي لبدء تشغيل تطبيقك. يقومون بتسجيل الخدمات وربط الفئات في حاوية الخدمة وتكوين تطبيقك.
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* تسجيل أي خدمات تطبيق
*/
public function register(): void
{
// تسجيل الارتباطات في الحاوية
$this->app->bind('App\Contracts\PaymentGateway', function ($app) {
return new \App\Services\StripePaymentGateway();
});
}
/**
* بدء تشغيل أي خدمات تطبيق
*/
public function boot(): void
{
// تنفيذ إجراءات بعد تسجيل جميع الخدمات
View::share('appName', config('app.name'));
}
}
تمرين عملي 1: فهم MVC
اشرح بكلماتك الخاصة ما يفعله كل مكون:
- ما هو دور النموذج (Model) في لارافيل؟
- ما هو دور العرض (View) في لارافيل؟
- ما هو دور المتحكم (Controller) في لارافيل؟
- لماذا يعد فصل هذه المخاوف مفيداً؟
تمرين عملي 2: هيكل المجلدات
أجب عن هذه الأسئلة حول هيكل لارافيل:
- أين ستنشئ فئة متحكم جديدة؟
- أين ستحدد تغييرات بنية جدول قاعدة البيانات؟
- أين ستخزن ملفات قوالب Blade؟
- لماذا يجب عدم إرسال ملف
.env إلى Git؟
تمرين عملي 3: أوامر Artisan
ابحث واكتب ما تفعله أوامر Artisan هذه:
php artisan make:model Post -mcr
php artisan migrate:fresh --seed
php artisan route:list
php artisan optimize
الملخص
في هذا الدرس، تعلمت:
- ما هو لارافيل ولماذا هو أحد أكثر إطارات عمل PHP شعبية
- نمط معمارية MVC وكيفية تطبيقه في لارافيل
- النظام البيئي الغني للارافيل من الحزم والأدوات الرسمية
- هيكل المجلدات والغرض من المجلدات الرئيسية
- أوامر وحدة Artisan Console الأساسية للتطوير
- دورة حياة الطلب في لارافيل
في الدرس التالي، سنقوم بتثبيت لارافيل وإعداد بيئة التطوير الخاصة بك حتى تتمكن من البدء في بناء أول تطبيق لارافيل الخاص بك!