أسئلة مقابلة Laravel : الجزء الأول
فهرس المقالة
مقدمة
في هذا الجزء الأول نستعرض مفاهيم أساسية يحتاج إليها مطور Laravel، مع توضيحات وأمثلة عملية.
تعرّف على البرمجة كائنية التوجه، ومفاهيم MVC، ووحدات التحكم، والتوجيه، وEloquent، وعمليات Migration. راجع دائمًا توثيق إصدار Laravel المستخدم في مشروعك؛ فبعض تفاصيل إعداد المشروع قد تختلف بين الإصدارات.
- ما المقصود بالبرمجة كائنية التوجه (OOP)؟
- ما الفرق بين الصنف (Class) والكائن (Object)؟
- ما دور نمط MVC في تطبيق Laravel؟
- ما وظيفة Controllers وطرق تعريف Routes؟
- كيف يعمل Eloquent Model، وما دور Migration؟
1. ما المقصود بالبرمجة كائنية التوجه (OOP)؟
OOP اختصار لـ Object-Oriented Programming، أي البرمجة كائنية التوجه. تنظّم هذه الطريقة البرنامج حول الأصناف (Classes) والكائنات (Objects) التي تجمع البيانات والسلوك المرتبط بها. تُستخدم في PHP وLaravel، إلى جانب أساليب برمجية أخرى.
2. ما الفرق بين الصنف (Class) والكائن (Object)؟
الصنف (Class) قالب يعرّف الخصائص (Properties) والوظائف (Methods). أما الكائن (Object) فهو نسخة منشأة من الصنف، ويمكن إنشاء عدة كائنات من الصنف نفسه.
- Class: يصف البيانات والسلوك المشترك.
- Object: نسخة تستخدم قيم الخصائص والوظائف المعرّفة في الصنف.
مثال لصنف بسيط في PHP:
class Courses{
public $course1 = "php";
public $course2 = "javascript";
}
يعرّف المثال صنفًا باسم Courses بخصائص عامة (public). يمكن إنشاء كائن من هذا الصنف واستخدام خصائصه.
إنشاء كائن والوصول إلى إحدى خصائصه:
course1." now";
يطبع المثال: Learn php now بعد إنشاء الكائن وقراءة قيمة الخاصية course1.
3. ما المقصود بنمط MVC في Laravel؟
يُستخدم نمط MVC (Model–View–Controller) لتنظيم مسؤوليات تطبيقات الويب. في Laravel، تتعامل النماذج مع البيانات، وتعرض قوالب Blade الواجهة، وتنسق Controllers معالجة الطلبات والاستجابات. هذا تقسيم توضيحي؛ ولا تفرض Laravel وضع كل منطق التطبيق في Controller أو Model واحد.
المكونات باختصار:
- Model: تمثيل البيانات والتعامل معها عبر Eloquent أو غيره.
- View: واجهة المستخدم، مثل قوالب Blade.
- Controller: تنسيق معالجة الطلبات عند الحاجة.
4. ما وظيفة وحدات التحكم (Controllers)؟
تربط المسارات الطلبات بوظائف التطبيق. ينظم Controller معالجة الطلب، ويمكنه استدعاء الخدمات أو النماذج ثم إرجاع استجابة مثل View أو JSON. اجعل مسؤولية Controller واضحة وتجنب حشر منطق الأعمال كله داخله.
إنشاء Controller باستخدام Artisan:
php artisan make:controller TestController
5. ما المقصود بالتوجيه (Routing) في Laravel؟
يربط التوجيه (Routing) عنوان URL وطريقة HTTP بإجراء مناسب في التطبيق. تُعرّف مسارات الويب عادةً في routes/web.php؛ أما مسارات API فيمكن إضافتها في الملف المخصص عند تفعيله بالمشروع. تختلف ملفات الإعداد بحسب إصدار Laravel وطريقة إنشاء التطبيق، لذا راجع توثيق الإصدار المستخدم.

يمكن تعريف المسارات باستخدام أفعال HTTP المناسبة، مثل GET وPOST وPUT وPATCH وDELETE. اختر الفعل وفق العملية المطلوبة، وتحقق من مدخلات المسار قبل استخدامها.
مسار GET بسيط يربط عنوانًا بدالة في Controller:
Route::get('/posts', [PostController::class, 'index']);
- معلمات المسار (Route Parameters): تمرّر قيمة ضمن عنوان URL، مثل معرّف مورد.
يمكن تقييد المعلمة والتحقق من شكلها:
Route::get('/posts/{post}', [PostController::class, 'show'])->whereNumber('post');
- المسارات المسماة (Named Routes): تمنح المسار اسمًا يمكن استخدامه لتوليد روابط داخل التطبيق بدل تكرار عنوان URL يدويًا.
مثال:
Route::get('/posts/create', [PostController::class, 'create'])->name('posts.create');
- مجموعات المسارات (Route Groups): تجمع المسارات التي تشترك في بادئة أو وسيط أو إعدادات مشتركة.
يمكن تنظيم بادئة واسم مشتركين بهذه الطريقة:
Route::prefix('posts')->name('posts.')->group(function () { Route::get('/', [PostController::class, 'index'])->name('index'); Route::get('/{post}', [PostController::class, 'show'])->name('show'); });
- مسارات الموارد (Resource Routes): تربط مجموعة مسارات RESTful بأساليب Controller القياسية. وهي تنشئ مسارات HTTP، ولا تنشئ تلقائيًا جداول قاعدة البيانات أو منطق CRUD.
مثال:
Route::resource('posts', PostController::class);
- مسارات موارد API (API Resource Routes): تنشئ المسارات المناسبة لواجهات API، ولا تتضمن عادةً مسارات create وedit الخاصة بالنماذج المرئية.
مثال:
Route::apiResource('test',TestController::class);
- المسار الاحتياطي (Fallback Route): يعالج الطلبات التي لا تطابق أي مسار معرّف. ضعه بعد المسارات الأخرى.
مثال لإرجاع 404 عند عدم وجود مسار مطابق:
Route::fallback(function(){
return abort(404);
});
6. ما هو نموذج Eloquent؟
مثال مبسط لمحتوى app/Models/Post.php، بافتراض إضافة الاستيرادات الموضحة:
php artisan make:model Post
والكود التالي من داخل ملف النموذج Post.php
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
protected $fillable = ['title', 'details'];
}
يتبع Eloquent اصطلاحات افتراضية تربط النموذج Post بجدول posts ومفتاح id؛ لذلك لا حاجة إلى تعريف هذه القيم في المثال. يحدد $fillable السمات المسموح بتعبئتها جماعيًا، لذا اجعله مناسبًا لحقول الإدخال الموثوقة في تطبيقك.
7. ما هي Migration وكيف ننشئ جدولًا؟
تسجل Migration تغييرات مخطط قاعدة البيانات في ملفات يمكن مراجعتها ومشاركتها بين بيئات التطوير.
أنشئ Migration لجدول posts باستخدام الأمر:
php artisan make:migration create_posts_table
ينشئ Artisan ملف Migration داخل مجلد database/migrations. افتح الملف وعرّف حقول الجدول في الدالة up، ثم عرّف التراجع عن التغيير في الدالة down.
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('details');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('posts');
}
};
ينشئ المثال الحقول id وtitle وdetails، كما ينشئ timestamps() الحقلين created_at وupdated_at.
بعد مراجعة ملف Migration وإعداد اتصال قاعدة البيانات، شغّل php artisan migrate في بيئة التطوير. قبل تطبيق تغييرات على الإنتاج، راجع خطة النشر والنسخ الاحتياطي للمشروع.
php artisan migrate
بهذا نصل إلى نهاية الجزء الأول من سلسلة أسئلة مقابلات العمل لمطوري Laravel. يمكنك متابعة الجزء الثاني لمراجعة مفاهيم وأسئلة إضافية مع أمثلة عملية.









