Table of Contents
مقدمة
Laravel Interview Part 2
سوف نتعرف في هذه السلسلة عن مفاهيم أساسية عادة يتم سؤالك عنها عند اجراء مقابلة عمل معك كمبرمج أو مطور باستخدام laravel framework ويجب أن تكون ملماً بهذه المفاهيم سواء من الناحية النظرية أو من الناحية العملية وهذا ماسوف نتعلمه في هذه السلسة من خلال إلقاء الضوء على هذه المفاهيم نظرياً وعملياً وسوف يتناول الجزء الثاني توضيح للمفاهيم وعناوين الموضوعات الآتية:
- العنوان الأول: تعريف Middleware ومثال على استخدامه:
- العنوان الثاني: وضح الفرق بين Eloquent و Query Builder:
- العنوان الثالث: كيفية ربط مشروع لارافيل بقاعدة بيانات ؟ :
- العنوان الرابع: كيفية حماية مشروعك من SQL Injection في لارافيل ؟ :
- العنوان الخامس: ما هي أنواع الـ Artisan Commands في Laravel؟ :
- العنوان السادس: ما هي Validation في لارافيل ؟ :
- العنوان السابع: ما الفرق بين Session و Cookies ؟ :
- العنوان الثامن: كيف تستخدم العلاقات Relationships في Laravel؟:
العنوان الأول: تعريف Middleware ومثال على استخدامه:
هو عبارة عن برامج وسيطة داخل لارافيل تقوم بالتحقق من طلبات وصول المستخدمين لمسار معين أو تقوم بتوجيهه إلى صفحة تسجيل الدخول أو إلى أي صفحة أخرى مثل الصفحة الرئيسية في حالة عدم التحقق من صلاحية المستخدم أو تقوم بالسماح له بالدخول صفحة المستخدم عند التأكد من صلاحيات الدخول
مثال:
Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});
العنوان الثاني: وضح الفرق بين Eloquent و Query Builder:
Query Builder عبارة عن برنامج يساعدك في التعامل مع جداول قاعدة البيانات ويمكنك تنفيذ عمليات create,read,update,delete بطرق سهلة وعالية التأمين ومختصرة أيضاَ
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class PostController extends Controller
{
public function index(){
$posts = DB::table('posts')->get();
return view('posts.index',compact('posts'));
}
}
Eloquent ORM (Models)
النماذج Models هي جزء من بنية MVC وهي التي تتيح لنا التعامل مع قاعدة البيانات بشكل سهل وفعال
مثال على إنشاء نموذج Model في إطار العمل لارافيل :
php artisan make:model Post
من خلال الأمر السابق أنشأنا نموذج يسمى Post ومن خلاله سوف نتعامل مع جدول posts الموجود في قاعدة البيانات كالتالي:
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index(){
$posts = Post::get();
return view('posts.index',compact('posts'));
}
}
العنوان الثالث: كيفية ربط مشروع لارافيل بقاعدة بيانات ؟ :
مثال على ربط مشروع لارافيل بقاعدة بيانات MySQL
قم بالدخول إلى phpmyadmin وانشيء قاعدة بيانات بالطريقة العادية ثم خذ اسم قاعدة البيانات واسم المستخدم وكلمة السر واذهب إلى مشروع لارافيل وافتح ملف env ثم أضف اسم قاعدة البيانات واسم المستخدم وكلمة السر كما في المثال التالي:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=posts_db
DB_USERNAME=root
DB_PASSWORD=
العنوان الرابع: كيفية حماية مشروعك من SQL Injection في لارافيل ؟ :
ما المقصود بـ SQL Injection أو حقن قواعد البيانات :
هو استهداف مقصود لاستعلامات قاعدة البيانات من خلال ثغرات برمجية ومن ثم حقن أوامر برمجية بهدف الوصول إلى البيانات والتعامل معها أو سرقتها أو حتى تعديلها أو حذفها أو استهداف بنية قاعدة البيانات ككل
كيف يحمي إطار لارافيل المشروع ضد SQL Injection ؟
استعلامات قاعدة البيانات التي تجريها مثلاً بواسطة Eloquent ORM أوQuery Builder تضيف ميزة الأمان عند التعامل مع قاعدة البيانات لأن تجنب استخدام الاستعلامات العادية يحمي مشروعك من Injection SQL
العنوان الخامس: ما هي أنواع الـ Artisan Commands في Laravel؟ :
هي مجموعة أوامر يوفرها إطار لارافيل لتنفيذ مهمات معينة مثل إنشاء وحدات تحكم controller ويتم كتابة هذه الأوامر في سطر أوامر terminal مثل الموجود في windows cmd أو visual studio أو برامج مخصصة لذلك
ولعرض قائمة بهذه الأوامر يتم كتابة الأمر التالي:
php artisan list
وهذا توضيح لبعض هذه الأوامر
1-php artisan serve
يختص هذه الأمر بتشغيل مشروعك
2-php artisan make:controller
يختص هذا الأمر بإنشاء وحدة تحكم controller
3-php artisan make:model
يختص هذا الأمر بإنشاء نماذج للتعامل مع جداول قاعدة البيانات
4- php artisan make:migration
يختص هذا الأمر بإنشاء الجداول
5- php artisan migrate
يختص هذا الأمر بترحيل الجداول التي انشأناها لقاعدة البيانات
6- php artisan migrate:rollback
يختص هذا الأمر بالتراجع عن عمليات الترحيل الأخيرة لقاعدة البيانات
7- php artisan route:list
يختص هذا الأمر بعرض جميع المسارات الموجودة في مشروعك
8- php artisan ui bootstrap
يختص هذا الأمر بإنشاء واجهات أمامية باستخدام بوتستراب
9- php artisan tinker
يختص هذا الأمر باختبار الاستعلامات
10- php artisan cache:clear
يختص هذا الأمر بمسح ذاكرة النخزين المؤقت
العنوان السادس: ما هي Validation في لارافيل ؟ :
التحقق من البيانات المدخلة بواسطة المستخدم ووضع قواعد معينة عند التعامل مع نماذج ادخال البيانات مثل الحقول المطلوب تعبئتها أو إجبار المستخدم على إدخال البيانات وفق قواعد معينة يتم تحديدها بواسطة Validation
public function store(Request $request)
{
$validate = $request->validate([
'username' => 'required|max:50',
'email' => 'required|email|unique',
'password' => 'required|min:8',
]);
}
العنوان السابع: ما الفرق بين Session و Cookies ؟ :
Session الجلسات: تخزين بيانات المستخدم وذلك للانتقال بين الصفحات بواسطة هذه البيانات مثل الاحتفاظ ببيانات تسجيل الدخول وتنتهي عند القيام بتسجيل الخروج
Cookies ملفات تعريف الارتباط: ملف نصي صغير يتم تخزينه على جهاز الكمبيوتر ويتم داخله حفظ معلومات عن المستخدم ويتم التعامل معه بواسطة متصفحات الانترنت
ويتم تخزين ملفات تعريف الارتباط على جهاز المستخدم فقط بينما يتم تخزين الجلسات على جهاز المستخدم و الخادم أيضاً
وفي إطار العمل لارافيل يتم التعامل مع الجلسات وملفات تعريف الارتباط كالتالي:
config/sessions.php
'driver' => env('SESSION_DRIVER', 'database'),
//قاعدة البيانات هي مكان التخزين الافتراضي
'lifetime' => env('SESSION_LIFETIME', 120),
//تم تحديد 120 دقيقة قبل انتهاء صلاحية الجلسة
'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
/*هذا السطر يمكنك من أنهاء صلاحية الجلسة عند إغلاق المتصفح*/
'cookie' => env(
'SESSION_COOKIE',
Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),
/*هنا يمكنك تغيير اسم ملفات تعريف الارتباط ولكن هذا لايفضل*/
العنوان الثامن: كيف تستخدم العلاقات Relationships في Laravel؟:
1- one to one
إذا كان لدينا جدول للمستخدمين وجدول لصور المستخدمين بحيث لكل مستخدم صورة واحدة وكل صورة لها مستخدم واحد (العلاقة بين الجدولين one to one )
مثال:
أولاً: ربط id جدول المستخدمين مع user_id في جدول الصور
ثانياُ:إنشاء function في image model and user model كما يلي:
Image Model
public function image()
{
return $this->hasOne(Image::class);
}
User Model
public function user()
{
return $this->belongsTo(User::class);
}
2- one to many
إذا كان لدينا جدول للمستخدمين وجدول لوسائل الاتصال فكل مستخدم يمكن أن يكون له أكثر من رقم هاتف أو بريد إلكتروني وكل رقم هاتف أو بريد إلكتروني له مستخدم واحد فقط (العلاقة بين الجدولين one to many )
مثال:
أولاً: ربط id جدول المستخدمين مع user_id في جدول وسائل الاتصال
ثانياُ:إنشاء function في contact model and user model كما يلي:
Contact Model
public function contacts()
{
return $this->hasMany(Contact::class);
}
User Model
public function user()
{
return $this->belongsTo(User::class);
}
3-has many through
إذا كان لدينا جدول للزبائن وجدول للمنتجات بحيث كل زبون قد يشتري منتج واحد أو اكثر وكل منتج قد يشتريه زبون واحد أو اكثرإذن سنحتاج إلى جدول وسيط بحيث يخزن مفتاح خارجي للزبائن ومفتاح خارجي اخر للمنتجات
مثال:
الجدول الوسيط مثلاً يسمى customers_products بالاضافة لجدول customers وجدول products
في model الجدول الوسيط سننشيء هذه الدالة
public function customer_product()
{
return $this->hasManyThrough(Product::class, Customer::class);
}
الخاتمة
وبهذا يكون قد انتهى الجزء الثاني من سلسلة كيف تجتاز مقابلة عمل خاصة بإطار لارافيل وسوف نتحدث إن شاء الله في الجزء الثالث عن موضوعات أخرى مهمة لا تخلو منها الأسئلة التي سوف توجه إليك أثناء إجراء مقابلات العمل الخاصة بإطار لارافيل