اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

يمكنني شرح الكيفية والطريقة لمساعدتك للوصول لحل لما تريده.

أولا نبدأ بتهيئة قاعدة البيانات خاصتنا، ففي حالة لم تكن لديك قم بإنشاء قاعدة بيانات جديدة (مثلا باسم school) ثم أنشئ جدول للطلبة فليكن students وليحتوي على الأعمدة اللازمة مثل id, name, email الخاص بكل طالب.

الخطوة التالية هي إنشاء صفحة عرض بيانات الطلبة، تنشئ ملف PHP جديد وليكن students.php وفي هذا الملف، احرص على أن يكون هناك اتصال بقاعدة البيانات واسترجاع لبيانات الطلبة ويمكن استخدام قالب HTML بسيط لعرض البيانات في جدول ولا تنسى إضافة زر للانتقال إلى صفحة إضافة طالب جديد.

هنا يجب إنشاء ملف PHP جديد لمعالجة هذه النقطة وليكن مثلا add_student.php في هذا الملف، أنشئ نموذج HTML يتيح للمستخدمين إدخال اسم الطالب والبريد الإلكتروني وحدد ليتم إرساله إلى ملف PHP آخر لمعالجة البيانات  insert_student.php.

ولو تلاحظ هنا فستجد أن كل ملف مترابط مع الآخر، فالآن سنحتاج لانشاء ملف آخر لمعالجة بيانات النموذج لتسمّيه مثلا insert_student.php

في هذا الملف، احصل على بيانات الطالب من النموذج، واتصل بقاعدة البيانات، وأدخل البيانات في جدول الطلبة وبعد إدخالك للبيانات، يمكنك إعادة توجيه المستخدم إلى صفحة عرض البيانات أو عرض رسالة تأكيد.

والأمر المهم هو أن يكون هنالك ترابط بين الصفحات ولضمان ذلك يجب إضافة الروابط اللازمة بين الصفحات والتأكد من أن زر "إضافة طالب جديد" في صفحة عرض بيانات الطلبة ينقل المستخدم إلى صفحة إضافة طالب جديد وأن نموذج إضافة طالب جديد يرسل البيانات إلى ملف المعالجة وهكذا.

  • 0
نشر
بتاريخ 9 ساعة قال ياسر مسكين:

يمكنني شرح الكيفية والطريقة لمساعدتك للوصول لحل لما تريده.

أولا نبدأ بتهيئة قاعدة البيانات خاصتنا، ففي حالة لم تكن لديك قم بإنشاء قاعدة بيانات جديدة (مثلا باسم school) ثم أنشئ جدول للطلبة فليكن students وليحتوي على الأعمدة اللازمة مثل id, name, email الخاص بكل طالب.

الخطوة التالية هي إنشاء صفحة عرض بيانات الطلبة، تنشئ ملف PHP جديد وليكن students.php وفي هذا الملف، احرص على أن يكون هناك اتصال بقاعدة البيانات واسترجاع لبيانات الطلبة ويمكن استخدام قالب HTML بسيط لعرض البيانات في جدول ولا تنسى إضافة زر للانتقال إلى صفحة إضافة طالب جديد.

هنا يجب إنشاء ملف PHP جديد لمعالجة هذه النقطة وليكن مثلا add_student.php في هذا الملف، أنشئ نموذج HTML يتيح للمستخدمين إدخال اسم الطالب والبريد الإلكتروني وحدد ليتم إرساله إلى ملف PHP آخر لمعالجة البيانات  insert_student.php.

ولو تلاحظ هنا فستجد أن كل ملف مترابط مع الآخر، فالآن سنحتاج لانشاء ملف آخر لمعالجة بيانات النموذج لتسمّيه مثلا insert_student.php

في هذا الملف، احصل على بيانات الطالب من النموذج، واتصل بقاعدة البيانات، وأدخل البيانات في جدول الطلبة وبعد إدخالك للبيانات، يمكنك إعادة توجيه المستخدم إلى صفحة عرض البيانات أو عرض رسالة تأكيد.

والأمر المهم هو أن يكون هنالك ترابط بين الصفحات ولضمان ذلك يجب إضافة الروابط اللازمة بين الصفحات والتأكد من أن زر "إضافة طالب جديد" في صفحة عرض بيانات الطلبة ينقل المستخدم إلى صفحة إضافة طالب جديد وأن نموذج إضافة طالب جديد يرسل البيانات إلى ملف المعالجة وهكذا.

كيف افعل دلك باستخدام لارافيل 

  • 0
نشر
بتاريخ 2 ساعة قال ايمن ميلاد:

كيف افعل دلك باستخدام لارافيل 

الموضوع مطول قليلاً لكنه بسيط فقط ستحتاج إلى إلمام بأساسيات الإطار يُمكنك الإطلاع على المقالات التي تخص لارافيل في الأكاديمية لفهم الموضوع بشكل أكبر.

مبدئياً ستحتاج إلى نموذج بيانات (model) مربوط بجدول في قاعدة البيانات (migration)، مسارات (routes) تخص عمليات crud على النموذج يُمكن إستعمال مسار من النوع resource هنا لأنه يختصر كل المسارات في سطر واحد، متحكم (controller) لتحويل الطلبات إليه لمعالجتها وإرسال رد يوافق الطلب، من الممكن أن تحتاج إلى أشياء إضافية مثلاً كصنف مصنع (factory) وصنف بذر (seeder) للتعامل مع بيانات إختبارية أثناء التطوير (أي لبذر جدول البيانات ببيانات وهمية لإختبار العمليات)

سأحاول شرح الموضوع بإختصار وعلى عمود واحد هو name، بإمكانك بعد ذلك تخصيص العمليات وإضافة الحقول التي تريدها بشكل كامل:

1 - إنشاء الملفات والأصناف، يمكنك هنا إستخدام أوامر artisan لهذا الأمر:

php artisan make:model Student -mcsf

الأمر السابق لإنشاء نموذج سميناه Student، و مررنا له الخيارات m وتعني migration و c تعني controller و s تعني seeder و f تعني factory.

2 - إنشاء مسار resource في ملف web.php:

use App\Http\Controllers\StudentController;

Route::resource('students', StudentController::class);

السطر السابق سيمكننا من تعريف 7 مسارات كاملة ويُعطي لكل واحد منها إسم:

/students -> name: students.index (GET) - controller method: index
/students -> name: students.store (POST) - controller method: store
/students/create -> name: students.create (GET) - controller method: create
/students/{student} -> name: students.show (GET) - controller method: show
/students/{student} -> name: students.update (PATCH) - controller method: update
/students/{student} -> name: students.destroy (DELETE) - controller method: destroy
/students/{student}/edit -> name: students.edit (GET) - controller method: edit

3 - ملء حقول جدول قاعدة البيانات (students) من خلال ملف التهجير الذي تم إنشاؤه:

public function up(): void
{
  Schema::create('students', function (Blueprint $table) {
    $table->id();
    $table->string('name');

    // add all fields later
    $table->timestamps();
  });
}

4 -  تنفيذ أمر التهجير:

php artisan migrate

سيقوم الأمر السابق بتهجير الملف السابق (إنشاء جدول students) وملئه بالحقول التي حددناها.

5 - تخصيص صنف المصنع وصنف البذر:

من خلال صنف المصنع StudentFactory سنقوم بإضافة الحقل name وإسناد قيمة وهمية له عبر الدالة fake:

public function definition(): array
{
  return [
    'name' => fake()->name
  ];
}

ومن خلال صنف البذر StudentSeeder سنستعمل النموذج والتابع factory لإنشاء 100 سجل مثلاً:

use App\Models\Student;

public function run(): void
{
  Student::factory(100)->create();
}

ثم من خلال الملف DatabaseSeeder سنضيف صنف البذر الخاص بالطلاب حتى يتم تنفيذه مع البذر:

public function run(): void
{
  $this->call([
    StudentSeeder::class 
  ]);
}

6 - تنفيذ أمر البذر:

php artisan db:seed

الآن يُفترض أن تجد جدول الطلاب به 100 سجل.

7 - كتابة المنطق في وظائف المتحكم:

<?php

namespace App\Http\Controllers;

use App\Models\Student;
use Illuminate\Http\Request;

class StudentController extends Controller
{
  public function index()
  {
    $students = Student::latest()->paginate(10);
    return view('students.index', compact('students'));
  }

  public function create()
  {
    return view('students.create');
  }

  public function store(Request $request)
  {
    $data = $request->validate([
      'name' => 'required|min:5|max:100',
    ]);

    Student::create($data);

    return redirect()->route('students.index')
      ->with('success', 'Student created successfully.');
  }

  public function show(Student $student)
  {
    return view('students.show', compact('student'));
  }

  public function edit(Student $student)
  {
    return view('students.edit', compact('student'));
  }

  public function update(Request $request, Student $student)
  {
    $data = $request->validate([
      'name' => 'required|min:5|max:100',
    ]);

    $student->update($data);

    return redirect()->route('students.index')
      ->with('success', 'Student updated successfully.');
  }

  public function destroy(Student $student)
  {
    $student->delete();

    return redirect()->route('students.index')
      ->with('success', 'Student deleted successfully.');
  }
}

8 - ستحتاج إلى إضافة الحقل name إلى مصفوفة fillable في النموذج Student:

protected $fillable = ['name'];

9 - إنشاء العروض (views) الأمر يعتمد على هيكلية ملفات العروض التي لديك وكيف تريد تنظيمها، لكن حسب الشيفرة التي كتبناها في المتحكم يُفترض أن يكون لدينا مجلد بالإسم students بداخل مجلد views وبداخله ملفات العروض (index - create - show - edit)، سأضيف ملف مخطط بالإسم main بداخل مجلد layouts لإستعماله كهيكل لبقية الملفات:

views:
  - layouts:
    - main.blade.php
  - students:
    - create.blade.php
    - edit.blade.php
    - index.blade.php
    - show.blade.php

في ملفات العروض ستقوم فقط بعرض البيانات المُرسلة من المتحكم، و ستوجه الروابط والإستمارات إلى المسارات التي أنشأناها، حتى لا يطول الجواب ستجد مُحتوى ملفات العروض والشرح ككل في مستودع github التالي: laravel11-crud

يُمكنك بعدها تخصيص الحقول والقالب بالشكل الذي تريد.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...