تم بناء Zend_Controller
و فى اعتبارنا ان يكون قابل للتمدد بسهولة, سواء عن طريق إن شاء
subclasses ترث من الـ class الموجودة او إنشاء classes جديدة تعتمد على الـ interfaces المسمى
Zend_Controller_Router_Interface
و
Zend_Controller_Dispatcher_Interface
.
تم بناء Zend_Controller ليدعم المواقع الجديدة بميزة الـ URIs النظيفة
[1]
, و هذا يحتاج الى ان تكون هذه الأعدادت مدعومة فى الـ webserver الخاص بك, اى يجب ان تتوفر خاصية
اعادة كتابة الـ URIs لكى تتمكن من اعادة توجيه كل الطلبات فى موقعك الى ملف واحد , و هنا نحن نسميه "index.php"
, و الذى بدوره سيكون
[2]bootstrap
و سيشغل Zend_Controller_Front
.
على سيرفرات الـ Apache هذا يتم التحكم به من خلال module اختيارى اسمه mod_rewrite.
الخطوة الأولى لإعداد السيرفر هى النجاح فى تركيب و تشغيل mod_rewrite. الخطوة التالية هى وضع ملفين فى الـ [3]document root و هما : htaccess. و ملف index.php . ملف htaccess. يتم استخدامه من قبل Apache و يجب ان يحتوى على اوامر mod_rewrite لتقوم بإعادة تحويل كل الطلبات الى index.php . لأسباب تنتمى إلى عملية التطوير , يكن من الأسهل كتابة امر mod_rewrite يقوم بتحويل كل الطلبات الى index.php ما عدا التى تحتوى امتداد ملفات معينة , و هنا مثال لملف htaccess. مماثل :
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
فى المثال , كل الطلبات التى لا تحتوى اى من امتدادات الملفات المذكورة فى الأعلى , سيتم تحويلها الى index.php . هذا مفيد فى اثناء عملية التطوير, بينما فى مرحلة الإنتاج يجب ان يتم كتابة اوامر اعادة التوجيه بحيث يتم إستثناء مجلدات معينة و ليس امتدادات ملفات.
بعد الإنتهاء من ملف htaccess. , قم بإنشاء ملف جديد اسمه index.php
,
السبب من إنشاء index.php هو ان يكون
[2]bootstrap
لـ Zend_Controller_Front , و الذى يجب ان يكون خارج الـ
[3]document root.
![]() |
ملاحظة |
---|---|
ملف الـ bootstrap يجب ان يكون ملف الـ PHP الوحيد المحفوظ فى الـ document root. |
لأسباب امنية, ينصح إطار عمل Zend بأن لا يتم وضع اى ملف PHP فى مجلدات يمكن الوصول إليها من خلال الـ webserver (اى المجلدات فى document root) . بالرغم من أن هذا لا يمكن تنفيذه فى بعض الحالات, مثل فى سيرفرات الأستضافة المتشاركة, يجب ان تعتبر هذا من العادات الجيدة و التى يجب ان تعتمد عليها كلما امكن.
قم بإنشاء ملف الـ bootstrap المسمى index.php و ضعه فى الـ document root ليقوم بتشغيل Zend_Controller_Front :
<?php require_once 'Zend/Controller/Front.php'; Zend_Controller_Front::run('/path/to/your/controllers'); ?>
إقرأ الجزء القادم بالنسبة الى path/to/your/controllers/
.
كما هو موضح فى ملف README.txt
, المجلد الذى يحتوى مكتبة إطار عمل Zend يجب
ان يكون فى الـ include_path
. إذا لم تقم بعمل هذا فى ملف php.ini , يمكنك أستخدام
()set_include_path
فى بداية الملف قبل ()require_once
.
![]() |
ملاحظة |
---|---|
فى هذا الوقت, نحن نقوم بالبحث عن حل لا يتطلب توافر mod_rewrite . ربما سنقوم بتوفير اعدادات للأنظمة التى تعمل مع او بدون امكانيات الـ mod_rewrite . ايضا يرجى ملاحظة ان هذا النظام ليس مرتبط بـ Apache و mod_rewrite تحديداً, و لكن اى webserver لديه هذه القدرة على اعادة التوجيه يجب ان يفى بالغرض. |
ينصح فى المواقع التى تعتمد على إطار عمل Zend ان تتشارك جميعها فى هيكلة موحدة لمجلداتها , ربما هذا لا يمكن تطبيقه فى بعض الحالات و لكن يفضل ان تطبقه فى اغلب او كل تطبيقاتك , فعند اختياراك ان تلتزم بهذه الهيكلة سيكن من السهل فهم الكود من قبل اى شخص يألف بنية إطار عمل Zend .
بنية المجلدات المقترحة تتكون من مجلدين اساسيين , مجلد اسمه library ( سيحتوى المكتبات الخاصة بـ Zend و غيرها) و المجلد الثانى يسمى application .
/application /models /views /controllers /document_root /images /styles .htaccess index.php /library /Zend
![]() |
ملاحظة |
---|---|
هذا القسم لم ينتهى بعد و مازال تحت البناء و يمكن ان يتغير محتواه فى اى وقت. |
كل تطبيق يجب ان يوفر controller بإسم IndexController
. هذا هو الـ controller الذى سيتم
الوصول إليه عندما لا يتم تحديد controller معين فى الـ URI, مثال على URI مماثل يمكن ان نراه هنا:
http://framework.zend.com/
الـ class المسمى IndexController
يجب ان يتم حفظه فى ملف بإسم
IndexController.php
, و هذا الملف يجب ان يوضع فى مجلد الـ controllers .
يجب ان يرث IndexController
من Zend_Controller_Action
,
و هنا مثال على إنشاء IndexController
:
<?php require_once 'Zend/Controller/Action.php'; class IndexController extends Zend_Controller_Action { public function indexAction() { echo 'Hello from IndexController'; } public function noRouteAction() { $this->_redirect('/'); } } ?>
![]() |
ملاحظة |
---|---|
هذا القسم لم ينتهى بعد و مازال تحت البناء و يمكن ان يتغير محتواه فى اى وقت. |
[1]
الـ URIs النظيفة : مثلا عنوان مثل
http://www.site.com/index.php?q=cat&id=45
لا يعتبر نظيف , و لكن هذا يعتبر نظيف
http://www.site.come/cat/45
, و هذا يعطى نفس قيمة الأول .
[2] منطقة بداية تشغيل برنامج
[3] document root او المجلد الجزرى هو المجلد الرئيسى فى موقعك حيث يتمكن المستخدم من الوصول إليه بمجرد كتابة إسم الموقع فقط.