إطار عمل CodeIgniter MVC (وحدة التحكم في عرض النموذج) مع مثال
ما هو MVC؟
معايير MVC للنموذج-العرض-التحكم. إنه نمط معماري يقسم التطبيق إلى ثلاثة مكونات رئيسية.
1. يتعامل النموذج مع منطق الأعمال وتفاعلات قاعدة البيانات
2. يقوم المراقب بتنسيق الأنشطة بين النموذج والعرض
3. العرض هو المسؤول عن عرض البيانات
فيما يلي بعض مزايا نمط MVC المعماري
- اقتران فضفاض - المكونات موجودة وتعمل بشكل مستقل عن بعضها البعض.
- المرونة - يمكن للمرء بسهولة إجراء تغييرات على المكونات الفردية
- زيادة الإنتاجية – يمكن لأكثر من شخص العمل في المشروع في نفس الوقت. يمكن لمطوري الواجهة الأمامية العمل على طرق العرض والعرض التقديمي بينما يمكن لمطوري الواجهة الخلفية التركيز على النماذج وبما أن النظام مقترن بشكل غير محكم، فإنه يعمل في نهاية اليوم
الموديل
النموذج مسؤول عن التفاعل مع مصادر البيانات. عادة ما تكون هذه قاعدة بيانات، ولكنها يمكن أن تكون أيضًا خدمة توفر البيانات المطلوبة. ومن الممارسات الشائعة أيضًا تضمين منطق الأعمال في النماذج بدلاً من وحدة التحكم. عادة ما تسمى هذه الممارسة بوحدة التحكم النحيفة النموذجية السمينة.
عادةً ما يقوم النموذج بكتابة البيانات في قاعدة البيانات، ويوفر آلية لتحرير البيانات وتحديثها وحذفها. في تطبيقات الويب الحديثة، تستخدم النماذج أنماط تصميم الوصول إلى البيانات مثل السجل النشط لتسهيل التفاعل مع قاعدة البيانات.
على سبيل المثال، يستخدم CodeIgniter مكتبة Active Record مدمجة لمساعدة النماذج بينما تستخدم أطر العمل الأخرى مثل Laravel مخطط Eloquent Object Relational Mapper (ORM) الذي يساعد في الوصول إلى البيانات.
مراقب
تستمع وحدة التحكم للطلبات الواردة للموارد من المستخدمين. إنه بمثابة الوسيط بين النموذج والعرض وفي بعض الأحيان ينفذ بعض قواعد العمل أيضًا. لنفترض أن وحدة التحكم تتلقى طلبًا لتسجيل مستخدم في قاعدة البيانات.
قد يقوم المتحكم بإجراء التحقق من صحة البيانات على ما تم إرساله للتأكد من إرسال جميع المعلمات المطلوبة. إذا كان هناك شيء مفقود، يتم إعادة توجيه المستخدم إلى صفحة التسجيل مع عرض رسالة الخطأ المناسبة. قد يطلب المتحكم أيضًا من النموذج إجراء المزيد من التحقق من خلال التحقق مما إذا كان عنوان البريد الإلكتروني المرسل موجودًا بالفعل. إذا نجحت جميع قواعد التحقق، يرسل المتحكم البيانات إلى النموذج للمعالجة وينتظر الاستجابة.
بمجرد أن يقوم النموذج بمعالجة المعلومات وإرجاع استجابة إيجابية، تقوم وحدة التحكم بتحميل العرض المناسب وتمرير البيانات التي تم إرجاعها من النموذج كمعلمة.
عرض الطلب
يتعامل العرض مع البيانات المقدمة للمستخدم النهائي. في تطبيقات الويب، غالبًا ما تحتوي طرق العرض على HTML وCSS واختياريًا Javaسيناريوتحتوي العروض على الحد الأدنى من التعليمات البرمجية البرمجية. عادةً ما يتم استخدام التعليمات البرمجية الموجودة في العروض للتنقل عبر مجموعات البيانات المستلمة كمعلمات من النموذج أو وظيفة المساعدة لتنظيف البيانات أو إنشاء روابط لتحرير السجلات. تستخدم معظم تطبيقات الويب الحديثة عادةً محركات قوالب تحدد تركيبها النحوي الخاص والذي يشبه إلى حد كبير التعليمات البرمجية الزائفة ويمكن للمصممين فهمها بسهولة. عند العمل مع CodeIgniter، من الشائع استخدام علامات PHP القصيرة وهياكل التحكم. لعرض شيء ما في CodeIgniter، قد يستخدم المرء التعليمات البرمجية التالية
<?=$title?>
في مقابل
<?php echo $title; ?>
عادة ما تتم كتابة هياكل التحكم على النحو التالي
<?php foreach ($customers as $customer): ?> <li> <p><?=$customer->first_name?><p> </li> <?php endforeach; ?>
كما ترون من المثال أعلاه، سيستخدم العرض مجموعة من PHP وHTML بدلاً من تضمين كل شيء في كود PHP خالص.
كيف تعمل أطر عمل MVC؟
الصورة التالية توضح عمل إطار عمل MVC
يستقبل المتحكم الطلب من المستخدم، ويتفاعل مع نموذج قاعدة البيانات إذا لزم الأمر ثم يعيد النتيجة مرة أخرى إلى المتصفح في شكل كود HTML والذي يفسره المتصفح إلى تنسيق يمكن قراءته بواسطة الإنسان ويعرضه للمستخدم.
وحدة تحكم CodeIgniter
دعنا الآن نحلل ما حدث عندما قمنا بتحميل عنوان URL أعلاه في متصفح الويب.
افتح ملف وحدة تحكم Welcome.php الموجود في التطبيق/وحدات التحكم
يجب أن تكون قادرًا على رؤية الكود التالي
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
$this->load->view('welcome_message');
}
}
هنا،
- محدد('BASEPATH') أو خروج('لا يسمح بالوصول المباشر إلى البرنامج النصي'); يمنع الوصول المباشر إلى وحدة التحكم إذا لم يأتي الطلب من خلال ملف Index.php. هذا لأغراض أمنية.
- فئة الترحيب تمتد CI_Controller {...} تحدد فئة وحدة التحكم الترحيبية وتوسع الفئة الأصلية CI_Controller
- يحدد فهرس الوظيفة العامة (){…} طريقة الفهرس التي تستجيب لعنوان URL
http://localhost:3000 - $this->load->view('welcome_message'); يقوم بتحميل طريقة العرض Welcome_message الموجودة في دليل التطبيق/طرق العرض
سنقوم الآن بتحديث طريقة الفهرس على النحو التالي
public function index()
{
$this->load->model('customers_model');
$data['customer'] = $this->customers_model->get_customer(3);
$this->load->view('welcome_message',$data);
}
هنا،
- $this->load->model('customers_model'); تحميل نموذج العملاء.
- $data['customer'] = $this->customers_model->get_customer(3); يستدعي الأسلوب get_customer للعملاء_نموذج ويمرر في المعلمة 3. في هذا المثال، قمنا بترميز القيمة بشكل ثابت ولكن في التطبيقات الواقعية، سيكون هذا معلمة من URI.
- $this->load->view('welcome_message',$data); يقوم بتحميل طريقة العرض Welcome_message وتمرير متغير البيانات $ إلى طريقة العرض
نموذج CodeIgniter
لنقم الآن بإنشاء العرض الذي أشرنا إليه في الكود أعلاه. من أجل البساطة، لن يتفاعل نموذجنا مع قاعدة بيانات ولكن سيتم إرجاع سجل عميل ثابت. سوف نعمل مع قواعد البيانات في الدروس القادمة.
قم بإنشاء ملف Customers_model.php في التطبيق/النماذج
أضف الكود التالي
<?php
class Customers_model extends CI_Model {
public function get_customer($id) {
$data['id'] = 3;
$data['first_name'] = 'John';
$data['last_name'] = 'Doe';
$data['address'] = 'Kingstone';
return $data;
}
}
هنا،
- فئة Customers_model يمتد CI_Model {...} يحدد النموذج Customers_model الذي يمتد CI_Model.
- تحدد الوظيفة العامة get_customer($id) {…} طريقة الحصول على العميل بناءً على معرف العميل
- تحدد $data[…] القيم الثابتة لعميلنا الوهمي. يجب أن يكون هذا صفًا تم إرجاعه من قاعدة البيانات.
- إرجاع بيانات $؛ إرجاع بيانات العميل.
وهذا هو، بالنسبة لنموذجنا. لنقم الآن بتعديل طريقة عرض Welcome_message
افتح Welcome_message.php الموجود في
application/views/welcome_message.php
استبدل الكود بالكود التالي
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>CodeIgniter MVC Basics</title> </head> <body> <h1>Customer Details Card</h1> <p>Customer ID : <strong><?=$customer['id']?></strong></p> <p>First Name : <strong><?=$customer['first_name']?></strong></p> <p>Last Name : <strong><?=$customer['last_name']?></strong></p> <p>Address : <strong><?=$customer['address']?></strong></p> </body> </html>
احفظ التغييرات
قم بتحميل عنوان URL التالي في متصفح الويب
http://localhost:3000/
يجب أن تكون قادرًا على رؤية بطاقة العميل كما هو موضح في الصورة أدناه
ملخص
- MVC هو نمط معماري يقسم التطبيق إلى ثلاثة مكونات رئيسية
- النموذج مسؤول عن التفاعل مع مصادر البيانات
- تستمع وحدة التحكم للطلبات الواردة للموارد من المستخدمين
- في تطبيقات الويب، غالبًا ما تحتوي طرق العرض على HTML وCSS واختياريًا Javaسيناريو
- تتلقى وحدة التحكم الطلب من المستخدم، وتتفاعل مع نموذج قاعدة البيانات إذا لزم الأمر، ثم تقوم بإرجاع النتيجة مرة أخرى إلى المتصفح في شكل كود HTML


