| مواقع صديقة: تعلم البي اتش بي - تصميم نت - أفضل استضافة |
| ||||||
| دروس متقدمة دروس وأكواد متقدمة لتعليم (بي اتش بي) PHP مستوى متقدم |
![]() |
| | LinkBack (2) | أدوات الموضوع | طريقة العرض |
| |
#1 (permalink)
|
| عضو فعال |
- بسم الله الرحمن الرحيم - السلام عليكم ورحمة الله وبركاته كيف تبني نظام ( Model – Controller – View ) المعروف ب MVC و ( المستخدم فى جميع اطارات العمل FrameWorks ) باستخدام PHP5 و أحد خصائص SPL ) Standard PHP Library ) وهي مكتبة تحتوي على مجموعة من الواجهات و الكائنات لحل بعض المشاكل القياسية تحتاج لتطبيق هذا الدرس توفر نسخة PHP5 و مكتبة SPl المضافة افتراضيا فى نسخة PHP 5 * انصحك باستخدام Xampp 1.6.3a - يحتوي على نسخة PHP 5.2.3 وستجد هنا درس تسطيب xampp للاخ الفاضل اشرف السمهوري وان يكون لديك خلفية ولو بسيطة عن البرمجة الكائنية والوراثة فى هذا الدرس ستتعلم ما هي اساسيات اى نظام MVC اكثر نمط تصميم شيوعا لتطبيقات الويب الكبيرة وكيف تبني اساس هذا النظام من الصفر وكيفية التعامل معه . @@ الجزء الاول – المقدمة و نقطة اساس النظام @@ ------------------------------------------------------------ لنبدا بتوضيح احد اساسيات هذا النظام وهي ( صفحة واحدة تعالجنا { كلنا } :1power: ) - هما مين { كلنا } دول :anger2: اقولك انا دول كل العمليات الى هيتم معالجتها لاظهار المحتوي الذي تريده فبدلا من ان تضع هذا السطر فى كل صفحة كود PHP: سنقوم الان ببداية التطبيق ، قم بعمل مجلد فارغ وليكن MVC ثم انشئ ملف فارغ باسم index.php الان سنقوم بعمل بعض المهام التى سنحتاجها فى بداية معالجة العمليات ، قم بعمل مجلد includes وانشئ ملف startup.php بداخله ثم قم باضافة السطر التالى لملف ال index.php كود PHP:
__________________ لضمان رد سريع على استفسارك أو موضوعك
http://hawyphp.com/blog/logo.jpg H a w y _ P H P I Program , Therefore I'm Student @ A T S I T - Programming Section Advanced Technical School 4 Information Technology |
| | |
| | #2 (permalink) |
| عضو فعال |
@@ الجزء الثاني - مهام البدء و كائن التسجيل @@ ----------------------------------------------------------- الجزئية الاولي - مهام البدء : --------------------------------- ملف البداية يستخدم فى القيام ببعض مهام بداية التنفيذ العامة مثل تعريف الثوابت ، و تحديد مستوي الاخطاء المراد تفعيلها ، الحصول على المسار الخاص بالاطار سيكون الجزء الاول من ملف البداية startup.php بهذا الشكل كود PHP: لمزيد عن الاخطاء درس الاخطاء فى لغة PHP للاخ الفاضل أشرف السمهوري http://www.tm-world.net/forum/showthread.php?t=462 ثم فى السطر الثاني قمنا بتنسيق رسالة تحذيرية لعرضها فى حالة عدم استخدام PHP5 نظرا لان النظام يعتمد بشكل اساسي على بعض ادوات SPL المتوفرة فى PHP5 فقط فى السطر الثاالث نقوم بالتاكد من نسخة ال PHP اذا كانت اقل من 5 نقوم بايقاف التنفيذ مع اظهار الرسالة السابق تنسيقها فى السطر الثاني فى السطر الرابع نقوم بعمل ثابت DS يحتوي على فاصل الادلة DIRECTORY_SEPARATOR وهو الباك سلاش [ \ ] لاختصار كتابته ليس اكثر فى السطر الخامس نقوم بالحصول على مسار الموقع الحقيقي بهذه الطريقة نقوم فى البداية بمعرفة اسم المجلدdirname للملف الحالى __FILE__ وهو فى حالتنا هنا startup.php وسيكون اسم المجلد هو includes ثم نضيف \ ثم ال .. ليخرجونا للمجلد الاعلي من includes وهو المجلد الرئيسي لنا MVC كما ذكرنا سابقا عند انشاء index.php فى السطر السادس نقوم بعمل ثابت site_path يحتوي على قيمة المتغير المحتوي على مسار المجلد الرئيسي فى السطر الخامس $sitepath ليصبح عندنا الثابت site_path به مسار المجلد الرئيسي كل ما فى هذا الملف سيتم تنفيذه فى بداية اى تنفيذ لاى ملف فى النظام . يتبع بالجزئية الثانية من الجزء الثاني ...
__________________ لضمان رد سريع على استفسارك أو موضوعك
http://hawyphp.com/blog/logo.jpg H a w y _ P H P I Program , Therefore I'm Student @ A T S I T - Programming Section Advanced Technical School 4 Information Technology |
| | |
| | #3 (permalink) |
| عضو فعال |
الجزئية الثانية – كائن التسجيل : ------------------------------------ الجزء القادم هو احتياجنا لكائن تسجيل يقوم باحتواء كل البيانات العامة على النظام باكمله هذا الكائن سيضمن داخل كل الكائنات المستقلة الاخري فى النظام ويستخدم لنقل البيانات العامة فى مختلف انحاء النظام بدون الاحتياج لاستخدام المتغير المسبق التعريف $GLOBALS سنقوم بانشاء الكائن ( الكلاس ) هذا فى ملف خارجي وسنقوم باستدعائه ببساطة باستخدام include() ولكن هيا نستخدم واحدة من روائع PHP5 الجديدة وهي الدالة [ __autoload() ] هذه الدالة الساحرة تستخدم لتحميل الكائنات ( الكلاسات ) ، عندما تصادف PHP كائن غير موجود فتقوم اولا باستدعاء الدالة __autoload() ، ثم تقوم بالاعلان عن خطا اذا لم يكن موجودا . لنقم باضافة الكود الاتي الى ملف startup.php كود PHP: واذا وجدت الملف ستقوم الدالة بتضمينه بواسطة include() @@ انشاء كائن التسجيل : ------------------------------- كائن التسجيل كما قلنا سابقا فهو يضمن داخل كل الكائنات المستقلة الاخري ويقوم بنقل البيانات العامة فى مختلف انحاء النظام ، وهو كائن (كلاس) بسيط جدا ، ولا يحتاج اكثر من ثلاثة اساليب (نهج) methods. اولا نقوم بانشاء مجلد واسمه [ classes ] ثم نقوم بانشاء ملف جديد ونسميه [ regisrty.php ] ونضع الكود الاتي بداخله كود PHP: نحن الان قمنا بعمل هيكل لكائن التسجيل ( Registry Class ) ، و كل ما نريد فعله هو اضافة بعض الاساليب ( النهج ) ، جميع كائنات التسجيل تحتاج الى اسلوب تخزين set() لتخزين البيانات ، واسلوب الإستخراجget() للحصول على البينات المخزنة ، ويمكننا ايضا اضافة اسلوب الحذف remove() ليقوم بحذف بعض البيانات المخزنة بالكائن ، سنضيف الكود الاتي الخاص بهذه الاساليب داخل الكائن : كود PHP: نحن الان بنينا كائن تسجيل كامل ولكن سنقوم باستخدام احد واجهات (وصلات) SPL وهي[ ArrayAccess] وتعمل على الوصول للكائن بطريقة المصفوفات ، لاحظ الكود الاتي ولا تضيفه [ يعتمد على الكائن السابق] : كود PHP: فى السطر الثاني نقوم بادخال مفتاح site وقيمته swalif.net فى السطر الثالث نقوم بالحصول على قيمة المفتاح site باستخدام اسلوب الاستخراج get() اما فى السطر الرابع فهو المقصود وهو نفس عمل السطر الثالث ( الحصول على قيمة المفتاح site ) ولكن باستخدام ال ArrayAccess فهي تتعامل مع $registry كانه مصفوفة فى حين انه كائن ، و ال ArrayAccess لا تمتلك مميزات حقيقية ، هي فقط تختصر الكتابة بدلا من انك تستخدم ->get()، لاستخدام ال ArrayAccess يجب علينا تغيير السطر الخاص بتعريف الكلاس وهو كود PHP: كود PHP: بتنفيذ ArrayAccess يجب اضافة اربع اساليب جديدة ثابتة للكائن معرفة مسبقا من خلال SPL قم باضافتهم اسفل الثلاث اساليب السابق ذكرهم كود PHP: والثالثة تقوم بادخال المتغير وقيمته والرابعة تقوم بالحذف وللمزيد عنهم http://www.php.net/~helly/php/ext/sp...rayAccess.html وللمزيد عن ال SPL بصفحة عامة http://www.php.net/manual/en/ref.spl.php والمانوال الخاص باستخدامها وتشعباتها http://www.php.net/~helly/php/ext/spl/ بعد ان قمنا باستكمال كائن التسجيل واضافة واجهة ArrayAccess فان طريقة ادخال البيانات واستخراجها اصبحت بالشكل التالي كود PHP: السطر الثاني - ادخال البيانات باستخدام Array Access السطر الثالث - استخراج البيانات بالطريقة العادية السطر الرابع - استخراج البيانات باستخدام Array Access ------ يبقي الان اضافة هذا السطر فى نهاية ملف startup.php السالف ذكره ( بعد دالة autoload ) كود PHP: @ ------ نهاية الجزء الثاني ----- @ يتبع بالجزء الثالث
__________________ لضمان رد سريع على استفسارك أو موضوعك
http://hawyphp.com/blog/logo.jpg H a w y _ P H P I Program , Therefore I'm Student @ A T S I T - Programming Section Advanced Technical School 4 Information Technology |
| | |
| | #4 (permalink) |
| عضو فعال |
@@ الجزء الثالث – النموذج The Model @@ -------------------------------------------------- [M] او Model هو جزء من MVC مسئول عن الاستعلام عن البيانات المراد عرضها من قاعدة البيانات او من اى مصدر اخر ثم يقوم بتقديمها للمتحكم Controller ، ويجب علينا ان نحصل على النموذج المناسب للطلب المقدم من المستخدم ولكن هنا سنقوم بطمس الفرق بين النموذج والمتحكم ، حيث يستخدم المتحكم مكتبة اتصال بقاعدة بيانات للاستعلام مباشرة من قاعدة البيانات بدلا من العديد من النماذج المختلفة فلذلك لن نتضمن النماذج فى نظامنا بشكل رسمي واذا استطعت ان تفهم فكرة عمل المتحكم عند شرحة فى الجزء الرابع سيمكنك ( اذا احببت ) القيام باضافة النماذج بنفس الطريقة . سنقوم هنا باضافة كود الاتصال بقاعدة البيانات لصفحتنا الرئيسية index.php داخل المجلد MVC يمكنك استخدام مكتبات الاتصال بقواعد البيانات المختلفة ولكن PHP5 ياتي معها مكتبة اتصال بقواعد البيانات قوية وهي [ PDO ] وساقوم باستخدامها هنا نظرا لوجود اتجاه رسمي من مطوري PHP لازالة اى مكتبات اتصال بقواعد البيانات غير PDO مثل [ OCI8 and MySQLi ] من الوضع الافتراضي واحالتهم الى PECL فى PHP6 واعتماد PDO بشكل رسمي كمكتبة الاتصال بقواعد البيانات فى PHP6 ، قوم باضافة هذا الكود الي index.php اذا كنت ستستخدم PDO واذا لم تريد استخدامها فقم باضافة كود الاتصال الخاص بالمكتبة التى تنوي استخدامها Mysqli ] [ مثلا : كود PHP: قم بتغيير demo الى اسم القاعدة و user الى اسم المستخدم و password الى كلمة السر ثم فى السطر الثاني قمنا بتخزين هذا المقبض فى كائن التسجيل حتي نجعله متغير عام global و يتاح لنا استخدامه فى اى صفحة اخري من السكربت عن طريقة استخراجه من كائن التسجيل كما سبق شرحه . فبهذه الاضافة البسيطة نكون انهينا جزء النموذج الذي اتفقنا عليه بان لا يكون نماذج مختلفة فى درسنا هذا وسنبدا باضافة المتحكم Controller واضافة المتحكم هذه تعني اننا بحاجة لكائن المسارات المسئول عن تحميل المتحكم controller المطلوب من خلال المستخدم عن طريق الرابط @ - كائن المسار Router : ------------------------------ سيقوم هذا الكائن بتحليل الطلب القادم من المستخدم ثم تحميل المتحكم الصحيح للبدء بعرض المطلوب عرضه ، الخطوة الاولي هي عمل الهيكل الاساسي لكائن المسار واضافته فى ملف router.php بمجلد classes السابق انشائه وموجود به registry.php : كود PHP: خاصية التسجيل وستحتوي على كائن التسجيل المسبق انشاؤه ، خاصية المسار وستحتوي علىالمسار الكامل للمتحكم ثم نقوم ببناء المشيد الذي ياخذ كائن التسجيل كمعطي ثم يقوم بتعيينه لخاصية التسجيل قم الان باضافة الكود الاتي الى صفحة index.php للقيام بتحميل كائن المسار كود PHP: ثم قمنا بتسجيل قيمة المتغير router بالمفتاح router فى كائن التسجيل ليكون المتغير router عام ويمكن استخدامه بجميع الصفحات وهو يحوي بداخله نسخة من كائن المسار لنقوم باضافة الوسائل الاساسية فى كائن المسار ، اول وسيلة هي وسيلة setPath() ، والتي تستخدم لتحديد الدليل ( المجلد ) الذي سيحوي جميع عناصر التحكم controllers وسنقوم الان باضافتها الى ملف router.php داخل الكائن router من الكود الاتي : كود PHP: كود PHP: الجزئية الاولي من هذه الوسيلة كالاتي : كود PHP: كود PHP: ثم نقوم باستخدام حلقة تكرار foreach لاستخراج القيم من المصفوفة كل على حدي ثم التاكد من كونه مجلد ، فاذا كان مجلد نقوم باضافته الى مسار الملف ثم ننتقل للجزء التالي من المصفوفة مع حذف الجزء الذي يمثل مجلد من المصفوفة باستخدام array_shift وهكذا ، هذا يتيح لنا استخدام مجلدات فرعية داخل المجلد الرئيسي لعناصر التحكم controllers واذا كان الجزء التالي ليس مجلد ولكنه ملف نقوم بتعيين هذا الجزء لمتغير $controller ونحذف عنصر الملف من المصفوفة ثم نخرج من الحلقة لحصولنا على ملف عنصر التحكم المنشود ، بعد الحلقة نتاكد من ايجاد عنصر التحكم فاذا لم يتم ايجادة نقم باستخدام الافتراضي وتعيين القيمة الافتراضية ونطلق عليها هنا index الى $controller ثم نقوم بالحصول على الوسيلة المطلوبة الموجودة داخل عنصر التحكم ، فعنصر التحكم هو كائن يتكون من مجموعة وسائل مختلفة والمتغير action يشير الى الوسيلة المطلوبة من خلال المستخدم واذا لم نجد وسيلة تم تحديدها فنقوم بارجاع الوسيلة الافتراضية index وفى النهاية نقوم بتجميع المسار الكامل لملف عنصر التحكم ( المسار و اسم عنصر التحكم و الامتداد ) ، الان الطلب تم تحليله داخل الوسيلة الحاملة له وهي loading() فتقوم بتحميل عنصر التحكم و تنفيذ الوسيلة المطلوبة ، الكود الاتي يمثل وسيلة loading() كاملة بملف router.php : كود PHP: ثم نتاكد من ملف عنصر التحكم موجود بالفعل فاذا كان موجود نقوم بتضمينه include واذا لم يكن نخرج رسالة خطا ثم نقوم بتعريف الكلاس بسابقة Controller ثم اسم الملف ثم نقوم بعمل نسخة من الكلاس لاستخدامها فى اخراج الوسيلة المطلوبة وبعد ذلك نقوم بالتاكد من ان الوسيلة المطلوبة هي دالة يمكن تفيذها داخل كائن عن طريق ادخالهم على شكل مصفوفة ثم تنفيذها واذا لم تكن نخرج رسالة خطا والان اكتملت وسيلة التشغيل الاساسية loading() سنقوم باضافة السطر الاتي الى نهاية index.php كود PHP: @ ------ نهاية الجزء الثالث ----- @ يتبع ....
__________________ لضمان رد سريع على استفسارك أو موضوعك
http://hawyphp.com/blog/logo.jpg H a w y _ P H P I Program , Therefore I'm Student @ A T S I T - Programming Section Advanced Technical School 4 Information Technology |
| | |
| | #5 (permalink) |
| عضو فعال |
@@ الجزء الرابع – عنصر التحكم Controller @@ ------------------------------------------------------- هذا الجزء بسيط جدا ، فى البداية نقوم بعمل المجلد السابق اشارة اليه controllers ليحوي جميع عناصر التحكم ثم نقوم بانشاء ملف جديد باسم controller_base.php بداخل مجلد classes السابق انشاؤه ثم نضع بداخل هذا الملف controller_base.php الكود الاتي كود PHP: سنقوم الان بانشاء اول عنصر تحكم قم بانشاء ملف باسم index.php داخل المجلد controllers وقم باضافة الكود الاتي اليه : كود PHP: وقم باضافة الكود الاتي اليه كود PHP: http://localhost/MVC/index.php?route=links/view سيعرض لك الجملة Hi, This Is The Links View بانشاء عنصر تحكم جديد واى وسائل بداخله نكون انشئنا صفحة جديدة كاملة فى نظامنا ولا نحتاج الى include لاى ملف عام فى البداية ، الان جزء عناصر التحكم يعمل بسلام ننتقل الان لجزء العرض View @@ نهاية الجزء الرابع @@ ------------------------------ يتبع ...
__________________ لضمان رد سريع على استفسارك أو موضوعك
http://hawyphp.com/blog/logo.jpg H a w y _ P H P I Program , Therefore I'm Student @ A T S I T - Programming Section Advanced Technical School 4 Information Technology |
| | |
| | #6 (permalink) |
| عضو فعال |
@@ الجزء الخامس- نظام العرض @@ ------------------------------------------ مثل نظام النموذج هناك العديد من الطرق المختلفة لانشاء نظام العرض ، يمكننا استخدام كائن المسار ليقوم بتحميل ملف باسم يبدا مثلا ب view_ ثم اسم يعبر عن محتواه مثل view_delete.php ولكن لنبقي على هذا الدرس بسيط سنقوم بانشاء كائن للقوالب بسيط جدا ليقوم بعرض القوالب . نقوم بانشاء ملف جديد باسم template.php فى مجلد classes ثم نقوم بوضع الكود الاتي بداخله : كود PHP: ويكون المفتاح هو المتغير ، الان سنضيف هذا الكود فى index.php قبل الجزء الخاص بكائن المسار router كود PHP: نحتاج الان الى وسيلة ادخال بيانات لكائن القوالب set() لتخزين المتغيرات وقيمها لتعرضها فى القوالب ووسيلة لحذف البيانات المدخلة remove() لنقم باضافة الكود الاتي الى ملف template.php كود PHP: الان يمكننا تخزين البيانات ، نحتاج الان الى وسيلة عرض show() لتقوم بعرض القوالب ، سنقوم بانشاء مجلد باسم templates داخل المجلد الرئيسي MVC وسيحتوي علىجميع ملفات القوالب ثم سنقوم باستخدام include() لتضمين ملفات القوالب والكود الاتي للوسيلة show() فى ملف template.php كود PHP: ومثال على ذلك ننشئ ملف باسم swalif.php فى مجلد templates ثم اكتب به الكود الاتي : كود PHP: قم بوضع هذا الكود داخل وسيلة index كود PHP: وبذلك استطيع ان اقوم بطباعة اسم الفتاح كمتغير ليخرج القيمة الذي قمت بتعيينها اليه ثم فى السطر الثاني استخدمت وسيلة show لعرض القالب الذي سبقت وسميته swalif طبعا تكتب اسمه هنا بدون الامتداد لان احنا فى وسيلة show بنضيف امتداد php يمكنك تغييره لاى امتداد اذا الكود الكامل لوسيلة index فى عنصر التحكم index الموجود داخل controllers هو : كود PHP: كود PHP: كود PHP: سنكتب به السطر التالى كود PHP: ونقطة اخري مفيدة ، الان يتم الوصول لعناصر التحكم بالشكل الاتي مثلا http://localhost/mvc/index.php?route=links/view ما رايكم فى جعل الوصول اليه بالشكل الاتي باستخدام mod_rewrite http://localhost/mvc/inks/view ضع الكود الاتي فى ملف .htaccess فى المجلد الاساسي mvc كود PHP: ليس الهدف الاساسي من هذا الدرس ان تقوم ببناء نظام خاص بيك من الصفر فهذا سيتطلب جهد كبير ووقت ويمكنك فعلا استخدام ما ابتكره غيرك ويوجد العديد من اطارات العمل القوية مثل CodeIgniter ولكن الهدف الاساسي اذا كنت فعلا تستخدم او استخدمت او تفكر فى استخدام احد هذه الاطارات ان يكون لديك فكرة وخلفية بسيطة عن اساس عملها وهيكلها هذا الدرس ليس من ابداعي ولكنه درس قراته وقمت بتطبيقه والحمد لله اضفت اليه الكثير و قمت ببناء اطار عمل بسيط ولكن ما يميزه عن غيره بالنسبة لي انى انا الى بنيته وفاهم كل خطوة فيه ماشية ازاى وده تفضيل شخصي مش اكتر والدرس ده للكاتب Dennis pallett ورابط الدرس من هنا http://www.phpit.net/article/simple-mvc-php5/ عندما قراته وفهمته وقمت بتطبيقة وبدات بالفعل فى الاضافة اليه و بدات فى اطار العمل الخاص فكرت فى انه ربما يفيد احد قرائته فقمت بوضعه بين ايديكم واتمني من الله ان ينال اعجابكم واذا اردت المزيد عن كيفية عمل اطارات العمل فانصحك بقراءة هذا الدرس لراسموس والد ال PHP http://toys.lerdorf.com/archives/38-...framework.html مش هو بردو ابوها وستجدوا كل الملفات والنظام كامل فى هذا الدرس فى المرفقات وان شاء الله قريبا هنزل نسخة من النظام مع تطبيق على استخدام مكتبة ال PDO باذن الله وبالنسبة لكلامي فوق عن( اعتماد مطوري PHP مكتبة PDO فى PHP6 مكتبة الاتصال بقواعد البيانات وتحويل الباقي الى PECL ) ليس من فراغ ولكنه من احداث اجتماع مطوري PHP فعلا لمناقشة اهم التغييرات التى ستحدث فى PHP6 مثل موضوع مكتبات قواعد البيانات السابق ذكره وحذف ال Register_globals و الSafe_mode وال magic_quotes والكثير من التعديلات بشكل رسمي واللينك http://www.php.net/~derick/meeting-n...nsions-to-pecl ------------------------------- وفى النهاية فإن اصبت فمن الله عز وجل و إن أخطات فمن نفسي ومن الشيطان اخوكم محمد ،، لا يتبع ...
__________________ لضمان رد سريع على استفسارك أو موضوعك
http://hawyphp.com/blog/logo.jpg H a w y _ P H P I Program , Therefore I'm Student @ A T S I T - Programming Section Advanced Technical School 4 Information Technology |
| | |
| | #7 (permalink) |
| عضو فعال |
ونسيت الدرس منقول مني من سوالف
__________________ لضمان رد سريع على استفسارك أو موضوعك
http://hawyphp.com/blog/logo.jpg H a w y _ P H P I Program , Therefore I'm Student @ A T S I T - Programming Section Advanced Technical School 4 Information |