7.2. البداية
السابق | فصل 7. Zend_Controller | التالي

## 7.2. البداية

### 7.2.1. مقدمة

تم بناء `Zend_Controller` و فى اعتبارنا ان يكون قابل للتمدد بسهولة, سواء عن طريق إن شاء subclasses ترث من الـ class الموجودة او إنشاء classes جديدة تعتمد على الـ interfaces أو الـ abstract classes العدبدة التى تتكون منها عائلة الـ controller .

### 7.2.2. إعدادات السيرفر

تم بناء 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 فى موقعك.

### 7.2.3. ملف الـ Bootstrap

بعد الإنتهاء من ملف 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`.

### 7.2.4. هيكلة المجلدات

ينصح فى المواقع التى تعتمد على إطار عمل Zend ان تتشارك جميعها فى هيكلة موحدة لمجلداتها , ربما هذا لا يمكن تطبيقه فى بعض الحالات و لكن يفضل ان تطبقه فى اغلب او كل تطبيقاتك , فعند اختياراك ان تلتزم بهذه الهيكلة سيكن من السهل فهم الكود من قبل اى شخص يألف بنية إطار عمل Zend .

بنية المجلدات المقترحة تتكون من مجلدين اساسيين , مجلد اسمه library ( سيحتوى المكتبات الخاصة بـ Zend و غيرها) و المجلد الثانى يسمى application .

    /application
      /models
      /views
      /controllers
    /document_root
      /images
      /styles
      .htaccess
      index.php
    /library
      /Zend

| تحت الإنشاء
هذا القسم لم ينتهى بعد و مازال تحت البناء و يمكن ان يتغير محتواه فى اى وقت.

### 7.2.5. الـ Controller الأساسى

كل تطبيق يجب ان يوفر 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 او المجلد الجزرى هو المجلد الرئيسى فى موقعك حيث يتمكن المستخدم من الوصول إليه بمجرد كتابة إسم الموقع فقط.

السابق | أعلى | التالي
فصل 7. Zend_Controller | البداية | 7.3. Subclassing