
Table of Contents
مقدمة
هذه واجهة الموقع التي نحتاج أن نصل في نهاية الدروس لبرمجتها سواء فرونت اند أو باك اند بالاضافة إلى الصفحات الداخلية والتعامل مع قاعدة البيانات الخاصة بالموقع واضافة الكتب والبحث عن كتب وتحميل كتب وعرض كل الكتب المضافة سابقاً وعرض تفاصيل الكتاب مثل العنوان وتاريخ الاضافة ونبذة عن محتوى الكتاب
أولاً:إنشاء المشروع
سوف ننشيء مشروعاً جديداً كما هو موضح بالشكل التالي

وفي الشكل التالي يتم إنشاء مشروع جديد بعنوان Bookstore

في الشكل التالي تم إنشاء المشروع بنجاح
وللانتقال للبروجكت سوف نكتب الأمر التالي

ولفتح مجلد المشروع في نافذة جديدة للتعامل مع ملفات المشروع سوف نكتب الأمر التالي
كما هو موضح بالشكل التالي

ثانياً: تشغيل المشروع
سوف نقوم بتشغيل المشروع من خلال الأمر التالي كما في الشكل التالي

وسوف يتم فتح المشروع في المتصفح كما بالشكل التالي

ثالثاً:إنشاء قاعدة البيانات
سوف نقوم بالدخول لـ phpmyadmin وننشيء قاعدة البيانات الخاصة بالمشروع كما هو موضح بالشكل التالي

ثم نذهب للمشروع وندخل لملف env ونستبدل اسم قاعدة البيانات الافتراضي للاسم الجديد الخاص بقاعدة البيانات التي انشأناها كما هو موضح بالشكل التالي

ثم سنقوم بإنشاء جدول جديد سوف نسميه books كما هو موضح بالشكل التالي

ومن ثم سنقوم بإضافة الحقول التي سوف نحتاج إليها كما بالشكل التالي

ثم نقوم بكتابة الأمر التالي

وسيتم إضافة الجداول لقاعدة البيانات كما هو موضح

وهذا شكل الجدول الذي أنشأناه

رابعاً: إنشاء model
سنقوم بإنشاء model ونسميه Book كما بالشكل التالي:

بعد إنشاء model Book سنقوم سوف نقوم بفتح الملف ونضيف كود يسمح بتعبئة الحقول في جدول books كما هو موضح بالشكل التالي:

خامساً: إنشاء Controller
سوف نقوم بإنشاء controller من نوع resource ونسميه BookController كما بالشكل التالي

سادساً: إنشاء مجلد assets
سوف ننشيء مجلد assets داخل مجلد public وسوف ننشيء ثلاثة مجلدات داخل مجلد asstes مجلد خاص بتخزين الكتب يسمى books ومجلد لتخزين الصور يسمى images ومجلد خاص بالبوتستراب يسمى bootstrap
كما بالشكل التالي

سوف نقوم بتحميل ملفات css و javascript من موقع البوتستراب ونضعها في مجلد bootstrap الذي أنشأناه
كما بالشكل التالي:

سوف نقوم بتحميل صورة على شكل كتاب ونضعها في مجلد الصور images الذي أنشأناه لعرضها في الصفحة الرئيسية كصورة افتراضية لكل كتاب نرفعه
سابعاً: إنشاء صفحات الموقع
سوف ننشيء داخل views صفحة رئيسية لعرض الكتب المضافة سابقاً وتحميل الكتب والبحث عن كتاب وصفحة أخرى لإضافة الكتب كما بالشكل التالي

سوف نضع الكود التالي داخل صفحة home page

ثامناً: إضافة عنوان ثابت في كل الصفحات للمشروع
سوف ندخل لملف env ونغير الاسم الافتراضي لاسم مشروعنا كما بالشكل التالي

ثم نكتب الكود التالي في title الخاص بكل صفحة كما بالشكل التالي

وسوف يظهر عنوان الموقع كما بالشكل التالي

تاسعاً: ملف filesystems
سوف ندخل لملف filesystems في config ونكتب مسار خاص بـ books uploads كمال بالشكل التالي

عاشراً: الكود
الصفحة الرئيسية
{{ config('app.name') }}
أضف كتاب
الكتب المضافة سابقاً
@foreach ($books as $book)
عنوان الكتاب:{{$book->title}}
تاريخ الاضافة:{{$book->created_at}}
{{$book->description}}
@endforeach
صفحة إضافة الكتب
{{ config('app.name') }}
@if ($errors->any())
@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
@endif
@if (session()->has('success'))
{{ session()->get('success') }}
@endif
@if (session()->has('warning'))
{{ session()->get('warning') }}
@endif
أضف كتاب


BookController
validate($request, [
'title' => 'required',
'description' => 'required',
'file' => 'required|mimes:pdf',
], [
'title.required' => 'حقل العنوان مطلوب',
'description.required' => 'حقل الوصف مطلوب',
'file.required' => 'اختر ملف',
'file.mimes' => 'صيغة الكتاب يجب ان تكون pdf',
]);
try {
$file_path = $request->file('file');
$file_name = $file_path->getClientOriginalName();
$destfile = "assets/book";
$book = Book::create([
'title' => $request->title,
'description' => $request->description,
'file' => $file_path->getClientOriginalName(),
]);
$book->save();
$file_path->move($destfile, $file_name);
session()->flash('success', 'تم اضافة الكتاب بنجاح');
return back();
} catch (Exception $ex) {
return redirect()->route('add_book')
->with('warning', 'حدث خطأ اثناء الحفظ');
}
}
public function download_book($file_name)
{
$fullPath = Storage::disk('Books_uploads')->get($file_name);
return response()->download($fullPath);
}
public function search(Request $request){
$search = $request->search;
$books = Book::where(function($query) use ($search){
$query->where('title','like',"%$search%");
})->get();
return view('home_page',compact('books','search'));
}
}
Route
name('home_page');
Route::get('/add_book', [BookController::class,'create'])->name('add_book');
Route::post('/store', [BookController::class,'store'])->name('store');
Route::get('/download/{file_name}', [BookController::class,'download_book'])->name('download');
Route::get('/search', [BookController::class,'search']);
وبهذا نكون قد انتهينا من برمجة المشروع ويمكن تطويره وإضافة ميزات اخرى.