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']);
وبهذا نكون قد انتهينا من برمجة المشروع ويمكن تطويره وإضافة ميزات اخرى.