فصل 3. Zend_Config

قائمة المحتويات

3.1. مقدمة
3.2. Zend_Config_Array
3.2.1. مقدمة
3.3. Zend_Config_Ini
3.3.1. مقدمة
3.4. Zend_Config_Xml
3.4.1. مقدمة

3.1. مقدمة

تم تصميم Zend_Config لتسهل استخدام بيانات الـ configuration الخاصة بتطبيقات الويب , حيث توفر واجهة استخدام تعتمد على اسم الـ property لقرائة المعلومات الخاصة بالـ configuration و ذلك من اكثر من وسيلة حفظ بيانات هرمية. حالياً توفر Zend_Config مجموعة من الـ class التى تساعد فى قرائة معلومات الـ configuration المحفوظة فى ملفات نصية و هى : Zend_Config_Array, Zend_Config_Ini, و Zend_Config_Xml.

تدعم Zend_Config نظام وراثة احادى و الذى يسمح للبيانات الخاصة بالـ configuration ان تورث من قسم بيانات configorations الى اخر, إذاً يدعم Zend_Config النظام الشجرى فى الوراثة و ذلك بدون قيد على طول الفروع, و كل فرع ابن يرث من اب واحد فقط.

داخليا تقوم Zend_Config بتطبيق interfaces و هى Countable و Iteratore لتوفر وصول اسهل الى البيانات. يتم توفير البيانات لـ Zend_Config على هيئة associative array و التى من الممكن ان تكون متعددة الأبعاد. class مساعد (مثل Zend_Config_Ini) هو من يوفر هذه الـ array لـ Zend_Config لكن هذا ليس اجباريا.

[ملاحظة] ملاحظة
تسمح Zend_Config بعمل تغييرات فى بيانات الـ configuration التى تم تحميلها الى الذاكرة , و لكنها لا توفر امكانية حفظ هذه البيانات فى اى من وسائط حفظ البيانات , الأدوات التى تقوم بإنشاء و تعديل بيانات الـ configuration و حفظها فى وسائط حفظ بيانات هى خارج نطاق إطار عمل Zend , لكن يوجد العديد من الحلول مفتوحة المصدر لإنشاء و تعديل بيانات الـ configuration و حفظها فى وسائط حفظ بيانات مختلفة و يمكنك الأستعانة بأى منها.

مثال 3.1. تحميل بيانات الـ Configuration من ملف INI

فى المثال التالى سنقوم بتحميل بيانات الـ configuration من ملف INI و ذلك بإستخدام Zend_Config_Ini:

<?php
require_once 'Zend/Config.php';
require_once 'Zend/Config/Ini.php';
$config = new Zend_Config(Zend_Config_Ini::load('/path/to/config.ini', 'production'));
?>   

الأن بيانات الـ configuration متوفرة و يمكن استخدامها من خلال الكائن المحفوظ فى config$ , فلنفترض ان بيانات الـ configuration كانت تحتوى على معلومات الأتصال بقاعدة بيانات و هذه المعلومات كانت مسجلة فى ملف الـ INI بهذا الشكل :

[production]
database.type     = pdo_mysql
database.host     = db.example.com
database.username = dbuser
database.password = secret
database.name     = dbname
        

سيمكنك إنشاء إتصال مع قاعدة البيانات عن طريق :

<?php
$myApplicationObject->databaseConnect($config->database->type,
                                      $config->database->host,
                                      $config->database->username,
                                      $config->database->password,
                                      $config->database->name);
?>   

كما رأيت فى المثال بالأعلى , يمكنك الوصول الى بيانات الـ configuration بإستخدام نفس طريقة قرائة قيمة حقل "preperty" من كائن "object" .

يمكنك إنشاء نسختك الخاصة من Zend_Config بسهولة لتضيف ميزات جديدة تحتاج إلبها, فى المثال التالى قمنا بإنشاء نسختنا الجديدة عن طريق الوراثة من Zend_Config و إنشاء method جديد بإسم ()dump ليقوم بطباعة البيانات المحفوظة فى الكائن :

<?php
class MyConfig extends Zend_Config
{
    protected $_indent;

    public function dump()
    {
        $this->_indent = 0;
        echo "<pre>\n";
        $this->_dumpRecursor($this);
        echo "</pre>";
    }

    protected function _dumpRecursor($config)
    {
        foreach ($config as $key => $value) {
            echo str_repeat("    ", $this->_indent) . "$key =>";
            if ($value instanceof Zend_Config) {
                echo "\n";
                $this->_indent++;
                $this->_dumpRecursor($value);
                $this->_indent--;
            } else {
                echo " $value\n";
            }
        }
    }
}

$config = new MyConfig(Zend_Config_Ini::load('/path/to/config.ini', 'production'));

$config->dump();
?>

إذا استخدمنا البيانات من ملف الـ configuration السابق , سيطبع التالى :

<pre>
database =>
    type => pdo_mysql
    host => db.example.com
    username => dbuser
    password => secret
    name => dbname
</pre>