مقدمة في Laravel: أقوى إطار عمل PHP الحديث
مقدمة في Laravel: أقوى إطار عمل PHP الحديث
دليل تخصصي من علاء عامر – مطور ومصمم مواقع وتطبيقات محترف
Laravel هو الخيار الأول لمطوري PHP حول العالم. يجمع بين البساطة والقوة ليوفر تجربة تطوير استثنائية.
2️⃣ المفاهيم الأساسية في Laravel
نمط MVC (Model-View-Controller):
<?php
// app/Models/User.php - النموذج
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
public function posts()
{
return $this->hasMany(Post::class);
}
}
// app/Http/Controllers/UserController.php - المتحكم
class UserController extends Controller
{
public function index()
{
$users = User::with('posts')->paginate(10);
return view('users.index', compact('users'));
}
public function show(User $user)
{
return view('users.show', compact('user'));
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8|confirmed'
]);
$user = User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'password' => Hash::make($validated['password'])
]);
return redirect()->route('users.show', $user)
->with('success', 'تم إنشاء المستخدم بنجاح!');
}
}
Blade Templates - العرض:
{{-- resources/views/users/index.blade.php --}} @extends('layouts.app')
@section('title', 'قائمة المستخدمين') @section('content')
<div class="container">
<h1>المستخدمون</h1>
<div class="row">
@forelse($users as $user)
<div class="col-md-4 mb-3">
<div class="card">
<div class="card-body">
<h5 class="card-title">{{ $user->name }}</h5>
<p class="card-text">{{ $user->email }}</p>
<p class="text-muted">عدد المقالات: {{ $user->posts->count() }}</p>
<a href="{{ route('users.show', $user) }}" class="btn btn-primary"
>عرض التفاصيل</a
>
</div>
</div>
</div>
@empty
<div class="col-12">
<div class="alert alert-info">لا يوجد مستخدمون حالياً</div>
</div>
@endforelse
</div>
{{ $users->links() }}
</div>
@endsection
4️⃣ Eloquent ORM - إدارة قواعد البيانات
العلاقات بين النماذج:
<?php
// نموذج المستخدم
class User extends Model
{
// علاقة واحد لكثير - المستخدم له مقالات متعددة
public function posts()
{
return $this->hasMany(Post::class);
}
// علاقة واحد لواحد - المستخدم له ملف شخصي واحد
public function profile()
{
return $this->hasOne(Profile::class);
}
// علاقة كثير لكثير - المستخدم له أدوار متعددة
public function roles()
{
return $this->belongsToMany(Role::class);
}
}
// نموذج المقال
class Post extends Model
{
protected $fillable = ['title', 'content', 'user_id', 'published_at'];
protected $casts = [
'published_at' => 'datetime',
];
// العلاقة العكسية - المقال ينتمي لمستخدم
public function user()
{
return $this->belongsTo(User::class);
}
// علاقة كثير لكثير - المقال له تصنيفات متعددة
public function categories()
{
return $this->belongsToMany(Category::class);
}
// Scope للمقالات المنشورة
public function scopePublished($query)
{
return $query->whereNotNull('published_at');
}
// Accessor للعنوان المنسق
public function getTitleAttribute($value)
{
return ucfirst($value);
}
}
استعلامات Eloquent المتقدمة:
<?php
// جلب البيانات مع العلاقات
$users = User::with(['posts', 'profile'])->get();
// استعلام بشروط معقدة
$publishedPosts = Post::published()
->where('created_at', '>=', now()->subDays(30))
->whereHas('user', function ($query) {
$query->where('status', 'active');
})
->orderBy('created_at', 'desc')
->paginate(15);
// تجميع البيانات
$userStats = User::selectRaw('
COUNT(*) as total_users,
AVG(DATEDIFF(NOW(), created_at)) as avg_days_since_join
')
->whereHas('posts')
->first();
// البحث في النصوص
$posts = Post::where('title', 'LIKE', '%Laravel%')
->orWhere('content', 'LIKE', '%Laravel%')
->get();
// استخدام القواعد المتعددة
$results = DB::table('posts')
->join('users', 'posts.user_id', '=', 'users.id')
->select('posts.*', 'users.name as author_name')
->where('posts.status', 'published')
->get();
6️⃣ النظام الأمني في Laravel
Authentication & Authorization:
<?php
// إعداد المصادقة
class LoginController extends Controller
{
public function login(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email',
'password' => 'required'
]);
if (Auth::attempt($credentials, $request->filled('remember'))) {
$request->session()->regenerate();
return redirect()->intended('/dashboard');
}
return back()->withErrors([
'email' => 'بيانات الدخول غير صحيحة.',
]);
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}
// Middleware للتحقق من الصلاحيات
class CheckRole
{
public function handle($request, Closure $next, ...$roles)
{
if (!Auth::check()) {
return redirect('login');
}
$user = Auth::user();
foreach ($roles as $role) {
if ($user->hasRole($role)) {
return $next($request);
}
}
abort(403, 'غير مصرح لك بالوصول لهذه الصفحة');
}
}
// استخدام Gate للتحكم في الصلاحيات
Gate::define('edit-post', function ($user, $post) {
return $user->id === $post->user_id || $user->hasRole('admin');
});
// في الـ Controller
public function edit(Post $post)
{
$this->authorize('edit-post', $post);
return view('posts.edit', compact('post'));
}
💡 أفضل الممارسات في Laravel
- اتبع PSR Standards - للتأكد من جودة الكود
- استخدم Form Requests للتحقق من البيانات
- فعّل Eager Loading لتجنب N+1 Problem
- استخدم Queue للمهام الثقيلة
- طبق Repository Pattern للمشاريع الكبيرة
- استخدم Events & Listeners للفصل بين المنطق
- فعّل Cache لتحسين الأداء
الخطوة التالية
تعلم Blade Templates و Database Migrations لبناء تطبيقات ديناميكية احترافية.
📩 هل تحتاج مساعدة في تطوير تطبيق Laravel؟
قسم المقالة
مقدمة في Laravel: أقوى إطار عمل PHP الحديث
دليل شامل للمبتدئين في Laravel، أهم ميزاته، وكيفية البدء في تطوير تطبيقات الويب الحديثة باستخدام أحدث التقنيات.
التواصل والاستشارة
تواصل مباشر عبر الواتساب أو الهاتف لفهم احتياجات مشروعك بدقة.
التخطيط والجدولة
وضع خطة عمل واضحة مع جدول زمني محدد لكل مرحلة من المشروع.
البرمجة والتطوير
تطوير المشروع بأحدث التقنيات لضمان الأداء والأمان العاليين.
المراجعة والتسليم
ختبار شامل ومراجعة دقيقة قبل التسليم النهائي للمشروع.