البرنامج التعليمي لإطار PHP MVC: مثال CodeIgniter
ما هو إطار عمل PHP MVC؟
PHP MVC هو نمط تصميم تطبيق يفصل بين بيانات التطبيق ومنطق الأعمال (النموذج) عن العرض التقديمي (العرض). يرمز MVC إلى النموذج والعرض ووحدة التحكم.
وحدة التحكم تتوسط بين النماذج ووجهات النظر.
فكر في نمط تصميم MVC كسيارة وسائق.
تحتوي السيارة على الزجاج الأمامي (العرض) الذي يستخدمه السائق (جهاز التحكم) لمراقبة حركة المرور أمامها ثم السرعة أو المكابح (الطراز) حسب ما يراه أمامه.
لماذا نستخدم PHP MVC Framework؟
- تُسهّل أطر عمل PHP MVC العمل مع التقنيات المعقدة من خلال؛
- إخفاء كافة تفاصيل التنفيذ المعقدة
- توفير الأساليب القياسية التي يمكننا استخدامها لبناء تطبيقاتنا.
- زيادة إنتاجية المطورين، وذلك لأن التنفيذ الأساسي للأنشطة مثل الاتصال بقاعدة البيانات، وتعقيم مدخلات المستخدم، وما إلى ذلك، قد تم تنفيذه جزئيًا بالفعل.
- الالتزام بمعايير الترميز المهنية
نمط تصميم PHP MVC
دعونا الآن نناقش بإيجاز كل مكون من مكونات نمط تصميم MVC.
الموديل – يهتم هذا الجزء بمنطق الأعمال وبيانات التطبيق. يمكن استخدامه لإجراء التحقق من صحة البيانات ومعالجة البيانات وتخزينها. يمكن أن تأتي البيانات من؛
- ملف ثابت
- قاعدة بيانات
- مستند XML
- مصادر بيانات صالحة أخرى.
مراقب - هذا هو الجزء الذي يتعامل مع طلبات المستخدمين للحصول على الموارد من الخادم.
على سبيل المثال، عندما يطلب المستخدمون عنوان URL …/index.php?products=listستقوم وحدة التحكم بتحميل نموذج المنتجات لاسترداد بيانات المنتجات ثم إخراج النتائج في عرض القائمة.
باختصار، تقوم وحدة التحكم بربط النماذج وطرق العرض معًا اعتمادًا على الموارد المطلوبة.
المشاهدات – يتناول هذا الجزء تقديم البيانات للمستخدم. وعادة ما يكون هذا في شكل صفحات HTML.
أنواع إطار عمل PHP MVC
يعد اختيار أفضل إطار عمل PHP تحديًا.
ليس عليك كتابة إطار العمل الخاص بك للاستفادة من مزايا MVC.
يجب عليك فقط محاولة إنشاء تصميم التطبيق الخاص بك المتعلق بـ MVC لفهم كيفية عمل أطر عمل MVC.
بمجرد أن تصبح مرتاحًا للطريقة التي تعمل بها أطر عمل MVC، يجب عليك الانتقال إلى أطر العمل الناضجة والمختبرة بالفعل.
يصف الجدول أدناه بإيجاز بعض أطر عمل PHP الشائعة والميزات التي يقدمها كل إطار.
| الإطار | الوصف |
|---|---|
|
|
إنها واحدة من أطر PHP MVC الأكثر شعبية. إنها خفيفة الوزن ولها منحنى تعليمي قصير. يحتوي على مجموعة غنية من المكتبات التي تساعد في بناء مواقع الويب والتطبيقات بشكل سريع. يمكن أيضًا للمستخدمين ذوي المعرفة المحدودة ببرمجة OOP استخدامها. تتضمن التطبيقات التي تعمل بالطاقة CodeIgniter؛ |
|
إنه إطار عمل Hierarchical Model View Controller HMVC آمن وخفيف الوزن. يحتوي على مجموعة غنية من المكونات لتطوير التطبيقات بسرعة. الشركات التي تستخدم Kohana تشمل؛ |
|
تم تصميمه على غرار Ruby on rails. وهو معروف بمفاهيم مثل أنماط تصميم البرامج، والاتفاقيات بدلاً من التكوين، وActiveRecord وما إلى ذلك. للكيك تشمل التطبيقات التي تعمل بالطاقة؛ |
|
|
إنه إطار قوي؛
ويتميز بواجهات برمجة التطبيقات من البائعين مثل Amazon، جوجل، Flickrو Yahoo وما إلى ذلك. إنها مثالية لتطوير تطبيقات الأعمال. تتضمن تطبيقات Zend التي تعمل بالطاقة؛
تشمل الشركات التي تستخدم إطار عمل Zend ما يلي:
|
نقل تطبيق استطلاع الرأي إلى CodeIgniter
في هذا البرنامج التعليمي، قمنا بإنشاء تطبيق استطلاع PHP. هنا، سنقوم بنقل هذا الرمز إلى CodeIgniter
- التحميل أحدث إصدار من CodeIgniter من موقع الكتروني.
- قم باستخراج محتويات الملف المضغوط إلى دليل التطوير الخاص بك في دليل خادم الويب الخاص بك. سوف نستخدم ciopinionpoll كاسم المجلد في هذا الدرس.
- استعرض للوصول إلى عنوان URL http://localhost/ciopinionpoll/
سنقوم الآن بنقل تطبيق استطلاع الرأي الخاص بنا إلى CodeIgniter. تذكر أن طلبنا تم تقسيمه إلى ثلاثة مكونات رئيسية وهي؛
- وحدة التحكم الأمامية – هذا هو الجزء الذي يستجيب لطلبات URL ويعيد الصفحة المطلوبة. سوف يذهب هذا الرمز إلى وحدة التحكم
- النموذج - هذا هو الكود الذي يستجيب للبيانات المطلوبة ويعيد البيانات المطلوبة. سوف يذهب هذا الرمز إلى النموذج
-
طرق العرض – هذا هو الكود المسؤول عن تنسيق البيانات وعرضها. سوف يذهب هذا الرمز إلى العرض
- استعرض للوصول إلى مجلد ciopinionpoll
- فتح قاعدة البيانات. php الملف الموجود في دليل التطبيق/التكوين.
- حدد أسطر التعليمات البرمجية التالية
إعدادات تكوين قاعدة البيانات
- اضبط اسم المستخدم على الجذر
- قم بتعيين كلمة المرور إلى كلمة مرور جذر المضيف المحلي
- اسم قاعدة البيانات إلى الرأي_الاستطلاع. لاحظ أننا سنستخدم قاعدة البيانات التي تم إنشاؤها في الدرس السابق.
- احفظ التغييرات وأغلق الملف.
خلق نموذجنا
بعد ذلك، سنقوم بإنشاء نموذجنا الذي سيمتد إلى CI_Model. يعد CI_Model جزءًا من مكتبات CodeIgniter. سيكون النموذج موجودًا في التطبيق/النماذج review_poll_model.php
<?php
class Opinion_poll_model extends CI_Model
{
public function __construct()
{
$this->load->database();
}
public function total_votes()
{
$query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries');
return $query->row()->choices_count;
}
public function get_results()
{
$libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
$table_rows = '';
for ($i = 1; $i < 5; $i++)
{
$sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries WHERE choice = $i;";
$result = $model->
select($sql_stmt); $table_rows .= "<tr><td>" . $ libraries [$i] . " Got:</td><td><b>" . $result[0] . "</b> votes</td></tr>";
}
public function add_vote($choice)
{
$ts = date("Y-m-d H:i:s"); $data = array('choice' => $choice, 'ts' => $ts); $this->db->insert('js_libraries', $data);
}
}
?>
هنا،
- "فئة Opinion_poll_model تمتد إلى CI_Model..." هو نموذجنا الذي يمتد إلى CI_Model
- "...الوالد:: __construct();" يستدعي منشئ CI_Model
- "$هذا->تحميل->قاعدة البيانات ()؛" يقوم بتحميل مكتبة قاعدة البيانات حتى يتمكن تطبيقنا من التفاعل مع قاعدة البيانات
- "$this->db->" هو السجل النشط لـ CodeIgniter. افحص هذا الصفحة لمزيد من المعلومات حول السجل النشط.
إنشاء وحدة التحكم الخاصة بنا لنبدأ الآن في إنشاء وحدة التحكم. سنستخدم وحدة التحكم الافتراضية CodeIgniter الموجودة في application/controllers/welcome.php. استبدل أكواد المصدر الخاصة بها بالكود التالي.
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('opinion_poll_model');
}
public function index() {
if ($this->input->post('submitbutton') && !$this->input->post('vote')) {
echo "<script>alert('You did not vote!');</script>";
}
if ($this->input->post('vote')) {
$this->opinion_poll_model->add_vote($this->input->post('vote'));
$data['total_votes'] = $this->opinion_poll_model->total_votes();
$data['rows'] = $this->opinion_poll_model->get_results();
$this->load->view('results', $data);
} else {
$this->load->view('opinion_poll_form');
}
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
?>
هنا،
- "إذا (! تعريف ('BASEPATH')) خروج ('لا يسمح بالوصول المباشر إلى البرنامج النصي')؛" يضمن عدم وصول المستخدمين مباشرة إلى فئة وحدة التحكم
- "تمتد فئة الترحيب إلى CI_Controller..." تعمل وحدة التحكم الخاصة بنا على توسيع فئة CI_Controller
- "الوظيفة العامة __construct()" تستدعي طريقة مُنشئ فئة CI_Controller وتقوم بتحميل نموذج Opinion_poll_model الخاص بنا
- "فهرس الوظيفة العامة ()..." هي الوظيفة التي يتم تعيينها إلى ملف Index.php. ويستخدم فئة إدخال CodeIgniter للتحقق مما إذا كان قد تم إرسال التصويت، وإضافته إلى قاعدة البيانات ثم عرض النتائج. إذا كانت مصفوفة النشر الخاصة بفئة الإدخال فارغة، فسيتم تحميل صفحة التصويت.
- "$this->input->post('...')" هي فئة إدخال CodeIgniter التي تلتقط محتويات المتغير العام $_POST.
- "$this->opinion_poll_model->add_vote($this->input->post('vote'))" يستدعي أسلوب add_vote الخاص بالنموذج لإضافة التصويت إلى قاعدة البيانات.
خلق وجهات نظرنا
تذكر من المثال السابق أن لدينا صفحتين HTML، واحدة للتصويت والأخرى للنتائج. سنستخدم نفس كود HTML مع تعديلات بسيطة لإنشاء وجهات نظرنا. أنشئ الملفات التالية في دليل application/views
opinion_poll_form.php
<html>
<head>
<title>
JavaScript Libraries - Opinion Poll
</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<form method="POST" action="index.php">
<p>
<input type="radio" name="vote" value="1" /> JQuery
<br />
<input type="radio" name="vote" value="2" /> MooTools
<br />
<input type="radio" name="vote" value="3" /> YUI Library
<br />
<input type="radio" name="vote" value="4" /> Glow </p>
<p>
<input type="submit" name="submitbutton" value="OK" />
</p>
</form>
</body>
</html>
لنقم الآن بإنشاء صفحة النتائج results.php
<html>
<head>
<title>JavaScript Libraries - Opinion Poll Results</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll Results</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p>
<p><table><tr><td>
<?php print($rows); ?>
</tr></td></table></p>
<p><a href="#">Return to voting page</a></p>
</body>
</html>
اختبار تطبيقنا
بافتراض أن الدليل الجذر لتطبيقك هو ciopinion، استعرض للوصول إلى http://localhost/ciopionpoll/
انقر فوق زر موافق، وسوف ترى رسالة التنبيه التالية
صوت للمرشح المفضل لديك ثم اضغط على موافق ستظهر لك صفحة النتائج التالية
خاتمة
يعد CodeIgniter إطار عمل PHP MVC سهل التعلم والاستخدام ويمكنه تقليل الوقت المستغرق في تطوير التطبيقات بشكل كبير.
يعد CodeIgniter إطار عمل PHP MVC سهل التعلم والاستخدام ويمكنه تقليل الوقت المستغرق في تطوير التطبيقات بشكل كبير.
ملخص
- الإطار عبارة عن مجموعة من المكتبات التي توفر التنفيذ الجزئي للمهام المشتركة.
- لدى PHP عدد من أطر عمل MVC الناضجة والمختبرة مفتوحة المصدر.
- يفصل نهج التطوير الجيد البيانات عن العرض التقديمي ويشجع على استخدام نقطة إدخال واحدة في التطبيق.
- يمكن نقل تطبيقات PHP التقليدية التي تتبع أفضل ممارسات تصميم التطبيقات إلى أطر عمل MVC مع الحد الأدنى من التعديلات.








