إطار العمل Yii2: مقدّمة عامّة
تنصيب إطار العمل Yii2 وجولة سريعة لتشغيل أول تطبيق باستخدامه، والتعرف على طريقة تعامل إطار العمل مع المسارات
يُعتبر إطار العمل Yii framework من إحدى الـ frameworks المبنية على لغة PHP، ويتم استخدامه من أجل بناء تطبيقات ومواقع الإنترنت.
ليست بشهرة بقية إطارات العمل مثل Laravel و Codeigniter، ولكنّها تُعتبر منافساً قوياً لهما من حيث الأداء والقوّة وسهولة الاستخدام، فهي تعتمد على معمارية MVC، وتُتيح مفهوم الـ modules لإعادة استخدام ما تمّت كتابته من أكواد برمجية في مشاريع أخرى، كما وتدعم الكثير من الـ widgets التي تسهّل العمل عليها لتختصر الكثير من الوقت والجهد في إنشاء مشاريع ضخمة.
في هذا المقال سنقوم بجولة سريعة في إطار العمل Yii (الإصدار رقم 2) لنتعرّف أكثر على كيفية البدء باستخدامه، وسنتطرق -في هذا المقال والمقالات الأخرى بإذن الله- للمفاهيم الأساسية التي نحتاجها لبناء مشاريع متكاملة.
لن نتكلّم عن البرمجة كائنية التوجّه OOP أو عن معمارية MVC، فطالما أنّك بصدد تعلّم إطار عمل فينبغي أن تكون هذه المفاهيم معروفة بالنّسبة لك، والتي لا تتغيّر من إطار عملٍ لآخر.
سنبدأ أولاً بتحميل ملفات الـ Yii2 من الموقع الرّسمي، وتحديداً سنقوم بتحميل الـ basic template، فإطار العمل Yii2 لديه اثنان من الـ templates الجاهزة، الأول هو basic والثاني advanced.
وسبب اختيار العمل على الـ basic template في هذه المقالات هو تسهيل التعرّف على Yii بطريقةٍ مشابهةٍ لبقية أُطُر العمل، فالـ advanced template لديه بنية مجلدات وملفات مختلفة قليلاً.
يوجد طريقتان لتحميل ملفات Yii2:
- عن طريق الـ composer والذي هو php package manager من خلال إنشاء مجلد جديد حيثما شئت على جهازك، ثمّ الانتقال إليه عن طريق الـ CMD وتنفيذ الأمر التالي:
composer create-project yiisoft/yii2-app-basic <basic>
حيث يتم استبدال <basic> باسم المشروع الذي تريده.
- عن طرق تحميل ملفات الـ Yii كملف مضغوط من خلال الرابط التالي:
https://www.yiiframework.com/download
ومن ثمّ الضغط على Yii 2 with basic application template كما في الصّورة.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
جولة سريعة في ملفات Yii2:
كما قلنا فإنّ Yii2 تعتمد على معمارية MVC، فعند فتح مجلّد المشروع سنلاحظ وجود مجلدات الـ controllers والـ models والـ views، كما سنلاحظ وجود مجلّد config الذي يحوي ملفات لإدارة الإعدادات الخاصّة بالمشروع مثل الاتّصال بقاعدة البيانات (من خلال ملف db.php)، والتحكّم بإعدادات الـ mails والـ URLs والـ requests (من خلال ملف web.php).
سنرى أيضاً مجلد web الذي يحوي ملفات الـ css والـ Javascript التي سنتعامل معها في المشروع.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
تشغيل المشروع الأول لك باستخدام Yii2 framework:
بعد تحميل ملفات المشروع أو إنشائه عن طريق الـ composer يمكنك الضغط على مجلد المشروع بالزر اليميني مع الضغط على زر shift بنفس الوقت واختيار Open command window here (أو بفتح الـ CMD والتوجه إلى مكان المجلد).
عند فتح الـ CMD قم بكتابة الأمر التالي:
yii serve
وعندها سيظهر لدينا -كما في الصورة- أنّ الـ server الخاص بالـ Yii قد تمّ تشغيله، وما عليك إلا فتح متصفّح إنترنت مثل chrome أو firefox وزيارة الـ url الموضّح في الصورة.
أول خطأ ستواجهه!
إذا كنتَ ممّن قام بتحميل ملفات الـ Yii كملف مضغوط، وبعدها قمتَ بتشغيل الـ server ستلاحظ عندما تدخل إلى المتصفح أنّ خطأً قد ظهر لك، ولكنّك لن تراه في حال كنتَ قد أنشأتَ مشروعاً عن طريق الـ composer.
الخطأ الظاهر هو نتيجة لوجود حقلٍ في إعدادت المشروع يتم ملؤه تلقائياً عند إنشاء مشروع عن طريق الـ composer، بينما في حالة تحميل الملفات بشكل مضغوط فسيكون هذا الحقل فارغاً.
هذا الحقل موجود في ملف web.php ضمن مجلد config، واسم الحقل cookieValidationKey، وهو مفتاح سرّي مطلوبٌ من أجل التحقق من الـ cookies، فاملأه بمجموعة محارف عشوائية، ثمّ قم بحفظ الملف وعُد للمتصفح وحدّث الصفحة وسترى تطبيقك يعمل بنجاح.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
طريقة تعامل الـ Yii2 مع الـ URLs:
إذا قمتَ بجولةٍ ضمن المشروع الذي أنشأته وضغطتَ مثلاً على زر About أو Contact في القائمة العلوية ستلاحظ شكل الـ url الذي يتغير أعلى المتصفح، ستراه غير مفهومٍ إلى حدٍّ ما، وإن فهمتَه أنت فربما لن يفهمه غيرك.
ولكن يمكنك تغيير شكل عرض المسارات لتصبح user-friendly؛ أي قابلة للقراءة والفهم بشكلٍ أفضل.
قم بفتح ملف config/web.php وسترى خاصّيةً اسمها urlManager وضمنها خاصّية enablePrettyUrl.
قم بتفعيل هذه الخاصّية عن طريق إزالة التعليقات التي تغلّفها، فمن خلال ذلك ستصبح خاصية prettyUrl مفعّلة وقابلة للاستخدام.
وعند عودتك للمتصفح والضغط على زر About مثلاً سترى تغيّر شكل الـ url.
ولكن ما الذي يوجد في المسار بعد عبارة localhost ورقم الـ port الذي يتم تشغيل التطبيق فيه؟
تعتمد Yii2 (بعد تفعيل خاصية prettyUrl) على طريقةٍ خاصّةٍ يتم فهمها بشكلٍ تلقائي في المشروع، وهذه الطريقة كالتالي:
<domain-name>/<controller-name>/<action-name>/<parameters>
فالـ <domain-name> هو عنوان الموقع (وفي حالتنا هنا هو localhost:8080)، وبعدها يتم كتابة اسم الـ controller وبعدها اسم الـ action التي يتم تنفيذها، وأخيراً الـ parameters إن وُجدت.
وعندما نقول action فنحن نعني اسم الـ function أو الـ method الموجودة ضمن ملف الـ controller، فاصطلاحاً تُدعى action عند استخدام Yii.
عندما ضغطنا على زر About لاحظنا أنّ العنوان هو localhost:8080/site/about
أي أنّه -حسب الكلام السابق- فإنّ كلمة site تدل على اسم الـ controller، وكلمة about تدلّ على اسم الـ action الموجودة في ملف الـ controller الذي اسمه site.
وللتأكد من ذلك نقوم بفتح مجلد controllers الموجود ضمن مجلدات المشروع، وسنلاحظ فعلاً وجود ملف اسمه SiteController.php، وإذا فتحنا هذا الملف سنلاحظ وجود function بداخله اسمه actionAbout.
يتم تلقائياً حذف كلمة Controller من اسم الـ controller الذي يوجد في المسار، أي أنّ SiteController سيتحوّل إلى site فقط في المسار، وكذلك مثلاً إذا كان لدينا controller آخر اسمه UsersControllers سيتحول إلى users فقط.
وبنفس الطريقة سيتم تلقائياً حذف كلمة action الموجودة في بداية اسم الـ action، فرأينا أنّ اسم الـ action كاملاً هو actionAbout، ولكن في المسار يتم حذف كلمة action والإبقاء على الكلمة التالية وهي about.
وفي حال كان اسم الـ action مكوّناً من أكثر من كلمة، فاصطلاحاً نقوم بكتابة أول حرف من كل كلمة capital، ويتم تحويل الاسم في المسار باستبدال كل حرف كبير ببداية كل كلمة إلى حرف صغير، ويتم وضع إشارة الشارطة - قبله.
فمثلاً لو كان اسم الـ action ضمن الـ controller هو actionGetUserDetails فسيتحول الاسم في الـ url إلى get-user-details (حيث تمّ حذف كلمة action والفصل بين كل كلمة والكلمة التالية بإشارة -).
ما الذي حصل بالتفصيل عند زيارة الرابط localhost:8080/site/about؟
الذي حصل هو أنّه بعد اسم الـ domain ستفهم الـ Yii أنّ الكلمة التالية هي اسم الـ controller الذي يجب الذهاب إليه لتنفيذ action موجودة داخله، فتمّ الذهاب إلى ملف SiteController.php والبحث عن تابع اسمه actionAbout ليتم تنفيذ محتواه.
محتوى التابع actionAbout هو:
return $this->render(‘about’);
وهذه هي الطريقة التي يتم فيها عرض صفحة view خاصّة بالمشروع، باستخدام التابع render الذي نمرّر له اسم صفحة الـ view التي نريد عرضها (بدون كتابة اللاحقة php.).
هذه الصفحة ينبغي أن تكون موجودةً ضمن مجلد views وتحديداً ضمن مجلد اسمه يطابق اسم الـ controller (في الـ url) الذي نستدعي فيه الـ action.
ففي مقالنا تفهم Yii بشكلٍ تلقائيٍ أنّ الصفحة التي نريد عرضها موجودة ضمن مجلد views/site لأنّ الـ controller الحالي هو SiteController (أي site فقط وفقاً للاسم الذي يتم عرضه في الـ url).
أما لو أردنا عرض صفحةٍ أخرى في غير مجلّد فيمكننا كتابة المسار بالكامل:
return $this->render(‘/other-folder/file-name’);
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !