Содержание


Reader


Reader, Ini, Xml, Json, Yaml, ЗФ2, Zend Framework 2, ZF2




Возможность читать файлы конфигурации предоставляет класс Zend\Config\Reader. Он работает с конкретными реализациями под различные форматы файлов. Zend\Config\Reader является просто интерфейсом, определяющим всего два метола: fromFile() и fromString(). Конкретными реализациями этого интерфейса являются:

 - Zend\Config\Reader\Ini

 - Zend\Config\Reader\Xml

 - Zend\Config\Reader\Json

 - Zend\Config\Reader\Yaml

 

Методы fromFile() и fromString() возвращают массивы PHP, содержащие данные конфигурационных файлов.

 

Важно: Отличия от ZF1

Zend\Config\Reader больше не поддерживает следующие функции:

 - Наследование разделов.

 - Чтение конкретных разделов.

 


Zend\Config\Reader\Ini

 

Zend\Config\Reader\Ini позволяет разработчикам хранить конфигурационные данные в знакомом формате INI и использовать их как массив.

 

Zend\Config\Reader\Ini использует parse_ini_file () PHP функции.  Вам необходимо более подробно ознакомиться с этой функцией для более полного понимания того, как работает Zend\Config\Reader\Ini, а так же как обрабатываются такие значения, как: «TRUE», «FALSE», «yes», «no», «NULL».

 

Важно: Key Separator

По-умолчанию символом-разделителем является точка «.». Однако при необходимости Вы можете задать другой, используя метод setNestSeparator():

$reader = new Zend\Config\Reader\Ini();
$reader->setNestSeparator('-');

В следующем примере будет показано простое использование Zend\Config\Reader\Ini для загрузки конфигурационных данных из INI файла. И так, имеется INIфайл с данными для productionsystemи stagingsystem:

webhost                  = 'www.example.com'
database.adapter         = 'pdo_mysql'
database.params.host     = 'db.example.com'
database.params.username = 'dbuser'
database.params.password = 'secret'
database.params.dbname   = 'dbproduction'

Для чтения этого INI файла используем Zend\Config\Reader\Ini :

$reader = new Zend\Config\Reader\Ini();
$data   = $reader->fromFile('/path/to/config.ini');
 
echo $data['webhost']  // prints "www.example.com"
echo $data['database']['params']['dbname'];  // prints "dbproduction"

Zend\Config\Reader\Ini позволяет включать один INI файл в другой. То есть объединять.

Например, есть INI файл с настройкой подключения к БД:

database.adapter         = 'pdo_mysql'
database.params.host     = 'db.example.com'
database.params.username = 'dbuser'
database.params.password = 'secret'
database.params.dbname   = 'dbproduction'

Мы можем подключить его в другой конфигурационный файл так:

webhost  = 'www.example.com'
@include = 'database.ini'

 

Если мы прочитаем этот файл используя Zend\Config\Reader\Ini, то получим схожий результат с предыдущим примером.

 

@include = 'file-to-include.ini' может быть использован в элементах как значение. Например имеется такой INI файл:

adapter         = 'pdo_mysql'
params.host     = 'db.example.com'
params.username = 'dbuser'
params.password = 'secret'
params.dbname   = 'dbproduction'

И он может быть использован как значение для элемента:

webhost           = 'www.example.com'
database.@include = 'database.ini'


Zend\Config\Reader\Xml


 

Zend\Config\Reader\Xmlпозволяет разработчикам читать данные конфигурации в XML-формате и работать с ними как с массивом. Корневой элемент XML файла или строки может быть назван произвольно.

 

Следующий пример демонстрирует простое использование Zend\Config\Reader\Xml  для загрузки конфигурационных данных из XML файла. И так, имеется XML файл:

<?xml version="1.0" encoding="utf-8"?>?>
"><config>
    "><webhost>www.example.com"></webhost>
    "><database>
        <adapter value="pdo_mysql"/>
        "><params>
            <host value="db.example.com"/>
            <username value="dbuser"/>
            <password value="secret"/>
            <dbname value="dbproduction"/>
        "></params>
    "></database>
"></config>

Используем Zend\Config\Reader\Xml для его чтения:

$reader = new Zend\Config\Reader\Xml();
$data   = $reader->fromFile('/path/to/config.xml');
 
echo $data['webhost']  // prints "www.example.com"
echo $data['database']['params']['dbname'];  // prints "dbproduction"

Zend\Config\Reader\Xml использует PHP класс XMLReader.

 

Используя Zend\Config\Reader\Xml есть возможность включения содержимого XML файла в XML элемент. Это обеспечивается с помощью стандартной функции XInclude из XML. Чтобы использовать эту функцию, вы должны добавить пространство имен XMLNS: х = "http://www.w3.org/2001/XInclude" в XML файле. Предположим, есть XML файл с данными для настройки БД:

<?xml version="1.0" encoding="utf-8"?>
"><config>
    "><database>
        "><adapter>pdo_mysql"></adapter>
        "><params>
            "><host>db.example.com"></host>
            "><username>dbuser"></username>
            "><password>secret"></password>
            "><dbname>dbproduction"></dbname>
        </params>
    </database>
</config>

Мы можем включить этот файл в другой XML файл следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<config xmlns:xi="http://www.w3.org/2001/XInclude">
    <webhost>www.example.com</webhost>
    <xi:include href="database.xml"/>
</config>

Синтаксис включения XML файла в XML элемент такой: <xi:include href="file-to-include.xml"/>

 


Zend\Config\Reader\Json

 

Zend\Config\Reader\Json позволяет разработчикам читать данные конфигурации в формате JSON и работать с ними как с массивом.

 

В следующем примере Вы увидите базовое использование Zend\Config\Reader\Json

 для загрузки данных в формате Json. Предположим есть Json файл со следующим содержимым:

{
  "webhost"  : "www.example.com",
  "database" : {
    "adapter" : "pdo_mysql",
    "params"  : {
      "host"     : "db.example.com",
      "username" : "dbuser",
      "password" : "secret",
      "dbname"   : "dbproduction"
    }
  }
}

Используем Zend\Config\Reader\Json длячтенияфайла :

$reader = new Zend\Config\Reader\Json();
$data   = $reader->fromFile('/path/to/config.json');
 
echo $data['webhost']  // prints "www.example.com"
echo $data['database']['params']['dbname'];  // prints "dbproduction"

Zend\Config\Reader\Json используеткласс Zend\Json\Json.

 

Используя Zend\Config\Reader\Json у нас появляется возможность включения одного файла в другой. Это возможно путем использования специального синтаксиса @include. Имеется Json файл:

{
  "database" : {
    "adapter" : "pdo_mysql",
    "params"  : {
      "host"     : "db.example.com",
      "username" : "dbuser",
      "password" : "secret",
      "dbname"   : "dbproduction"
    }
  }
}

Мы можем подключить его в другой Json файл следующим образом:

{
    "webhost"  : "www.example.com",
    "@include" : "database.json"
}


Zend\Config\Reader\Yaml

 

Zend\Config\Reader\Yaml позволяет разработчикам читать данные конфигурации в формате YAML и работать с ними как с PHP массивом. Для того, чтобы использовать YAML reader, нужно передать функцию обратного вызова для внешних библиотек PHP или использовать YAML расширение PECL.

 

Использование Zend\Config\Reader\Yaml на примере. Есть YAML файл:

webhost: www.example.com
database:
    adapter: pdo_mysql
    params:
      host:     db.example.com
      username: dbuser
      password: secret
      dbname:   dbproduction

Читаем его с помощью Zend\Config\Reader\Yaml:

$reader = new Zend\Config\Reader\Yaml();
$data   = $reader->fromFile('/path/to/config.yaml');
 
echo $data['webhost']  // prints "www.example.com"
echo $data['database']['params']['dbname'];  // prints "dbproduction"

Если Вы хотите использовать внешний YAML читатель, то должны передать функции обратного вызова в конструкторе класса. Например, если вы хотите использовать SpyC библиотеки:

// include the Spyc library
require_once ('path/to/spyc.php');
 
$reader = new ZendConfigReaderYaml(array('Spyc','YAMLLoadString'));
$data   = $reader->fromFile('/path/to/config.yaml');
 
echo $data['webhost']  // prints "www.example.com"
echo $data['database']['params']['dbname'];  // prints "dbproduction"

Так же Вы всегда можете создать экземпляр класса Zend\Config\Reader\Yaml без каких-либо параметров и указать YAML читатель (reader)  при следующем вызове, используя метод  setYamlDecoder().

 

Подключение одного YAML файла в другой происходит путем использования синтаксиса @include.  Есть YAML файл:

database:
    adapter: pdo_mysql
    params:
      host:     db.example.com
      username: dbuser
      password: secret
      dbname:   dbproduction

Подключаем его в другой YAML файл:

webhost:  www.example.com
@include: database.yaml

Автор статьи: DuB