تم بناء Zend_Controller
و فى اعتبارنا ان يكون قابل للتمدد بسهولة, سواء عن طريق إن شاء
subclasses ترث من الـ class الموجودة او إنشاء classes جديدة تعتمد على الـ interfaces
أو الـ abstract classes العدبدة التى تتكون منها عائلة الـ controller .
تم بناء 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 . هذا مفيد فى اثناء عملية التطوير, بينما فى مرحلة الإنتاج يجب ان يتم كتابة اوامر اعادة التوجيه بحيث يتم إستثناء مجلدات معينة و ليس امتدادات ملفات.
![]() |
مكان ملف الـ bootstrap |
---|---|
ملف الـ bootstrap يجب ان يكون ملف الـ PHP الوحيد المحفوظ فى الـ document root. |
الوظائف الأساسية لـ Zend_Controller ايضا تدعم الـ URLs
التى تستخدم البرامترات العادية -- على سبيل المثال ,
index.php?controller=foo&action=bar
.
ايضاً, هناك router أخر و هو Zend_Controller_RewriteRouter
و الذى يعمل فى العديد من البيئات , حتى الكثير من التى لا تحتوى امكانيات تتشابه مع
ما تقوم به mod_rewrite , فإن كنت لا تستطيع أن تستخدم mod_rewrite أو
ما يعادلها , فمازال بأمكانك أن تستخدم Zend_Controller فى موقعك.
بعد الإنتهاء من ملف htaccess. , قم بإنشاء ملف جديد اسمه index.php
,
السبب من إنشاء index.php هو ان يكون
[2]bootstrap
لـ Zend_Controller_Front , و الذى يجب ان يكون خارج الـ
[3]document root.
![]() |
مكان ملف الـ bootstrap |
---|---|
ملف الـ 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
.
ينصح فى المواقع التى تعتمد على إطار عمل Zend ان تتشارك جميعها فى هيكلة موحدة لمجلداتها , ربما هذا لا يمكن تطبيقه فى بعض الحالات و لكن يفضل ان تطبقه فى اغلب او كل تطبيقاتك , فعند اختياراك ان تلتزم بهذه الهيكلة سيكن من السهل فهم الكود من قبل اى شخص يألف بنية إطار عمل Zend .
بنية المجلدات المقترحة تتكون من مجلدين اساسيين , مجلد اسمه library ( سيحتوى المكتبات الخاصة بـ Zend و غيرها) و المجلد الثانى يسمى application .
/application /models /views /controllers /document_root /images /styles .htaccess index.php /library /Zend
![]() |
تحت الإنشاء |
---|---|
هذا القسم لم ينتهى بعد و مازال تحت البناء و يمكن ان يتغير محتواه فى اى وقت. |
كل تطبيق يجب ان يوفر controller أساسى. هذا هو الـ controller الذى سيتم إستخدامه إن لم يتم تحديد controller معين فى الـ URI, مثال على URI مماثل يمكن ان نراه هنا:
http://framework.zend.com/
طبقاً للأعدادات الأساسية , الـ controller الأساسى يجب أن يحمل
الأسم IndexController
و أن يكن فى ملف
يحمل الأسم IndexController.php
,
داخلياً, سيتم تعريفه على انه الـ controller صاحب الأسم 'index' .
يمكنك أن تغير الـ controller الأساسى قبل عمل dispatch للـ
front controller عن طريق إستدعاء setDefaultController()
من خلال كائن الـ front controller أو كائن الـ dispatcher , عند قيامك بهذا ,
إستخدم قواعد التسمية الداخلية للـ controllers , أى أن , الـ class المسمى
HomeController
(الموجود فى الملف
HomeController.php
) سيتم الأشارة إليه على
انه home
.
الـ controllers يجب أن يرثوا من Zend_Controller_Action
و أن يوضعوا فى مجلد الـ controllers .
<?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('/'); } } ?>
المزيد من المعلومات عن الـ controllers و الـ actions الأساسية , مع كيفية كتابة action controller classes , سيتم عرضها فى فصول أخرى.
![]() |
تحت الإنشاء |
---|---|
هذا القسم لم ينتهى بعد و مازال تحت البناء و يمكن ان يتغير محتواه فى اى وقت. |
[1]
الـ URIs النظيفة : مثلا عنوان مثل
http://www.site.com/index.php?q=cat&id=45
لا يعتبر نظيف , و لكن هذا يعتبر نظيف
http://www.site.come/cat/45
, و هذا يعطى نفس قيمة الأول .
[2] منطقة بداية تشغيل برنامج
[3] document root او المجلد الجزرى هو المجلد الرئيسى فى موقعك حيث يتمكن المستخدم من الوصول إليه بمجرد كتابة إسم الموقع فقط.