1 <sect1 id="zend.config.adapters.xml">
2 <title>Zend_Config_Xml</title>
4 <code>Zend_Config_Xml</code> pozwala programistom przechowywać dane
5 konfiguracyjne w prostym formacie XML a następnie odczytywać je w aplikacji
6 używając składni zagnieżdżonych właściwości obiektów. Nazwa głównego elementu
7 pliku XML jest nieistotna i może być dowolna. Pierwsze poziomy elementów
8 XML odpowiadają sekcjom danych konfiguracyjnych. Format XML obsługuje
9 hierarchiczne zorganizowanie za pomocą zagnieżdżania elementów XML wewnątrz
10 elementów poziomu sekcji. Zawartość najbardziej zagnieżdżonego elementu
11 XML odpowiada wartości danej konfiguracyjnej. Dziedziczenie sekcji jest
12 obsługiwane za pomocą specjalnego atrybutu XML nazwanego <code>extends</code>,
13 a wartość tego atrybutu odpowiada nazwie sekcji, której dane mają być
14 odziedziczone przez rozszerzającą sekcję.
17 <title>Zwracany typ</title>
19 Dane konfiguracyjne odczytywane przez <code>Zend_Config_Xml</code> są
20 zawsze zwracane jako łańcuchy znaków. Konwersja danych z łańcuchów znaków
21 do innych typów leży w gestii programistów, którzy mogą dopasować to
25 <example id="zend.config.adapters.xml.example.using">
26 <title>Użycie Zend_Config_Xml</title>
28 Ten przykład pokazuje podstawowe użycie klasy <code>Zend_Config_Xml</code>
29 do ładowania danych konfiguracyjnych z pliku XML. W tym przykładzie
30 znajdują się dane konfiguracyjne zarówno dla systemu produkcyjnego
31 jak i dla systemu rozbudowywanego. Z tego względu, że dane
32 konfiguracyjne systemu rozbudowywanego są bardzo podobne do tych dla
33 systemu produkcyjnego, sekcja systemu rozbudowywanego dziedziczy po
34 sekcji systemu produkcyjnego. W tym przypadku decyzja jest dowolna
35 i mogłoby to być zrobione odwrotnie, z sekcją systemu produkcyjnego
36 dziedziczącą po sekcji systemu rozbudowywanego, chociaż nie może to
37 być przykładem dla bardziej złożonych sytuacji. Załóżmy, że poniższe
38 dane konfiguracyjne znajdują się w pliku <code>/path/to/config.xml</code>:
40 <programlisting role="xml"><![CDATA[
44 <webhost>www.example.com</webhost>
46 <adapter>pdo_mysql</adapter>
48 <host>db.example.com</host>
49 <username>dbuser</username>
50 <password>secret</password>
51 <dbname>dbname</dbname>
55 <staging extends="production">
58 <host>dev.example.com</host>
59 <username>devuser</username>
60 <password>devsecret</password>
68 Następnie załóżmy, że programista aplikacji potrzebuje danych
69 konfiguracyjnych aplikacji rozbudowywanej z pliku XML. Prostą
70 sprawą jest załadowanie tych danych określając plik XML oraz
71 sekcję dla aplikacji rozbudowywanej:
73 <programlisting role="php"><![CDATA[
74 $config = new Zend_Config_Xml('/path/to/config.xml', 'staging');
76 echo $config->database->params->host; // wyświetla "dev.example.com"
77 echo $config->database->params->dbname; // wyświetla "dbname"
81 <example id="zend.config.adapters.xml.example.attributes">
82 <title>Używanie atrybutów znaczników w Zend_Config_Xml</title>
84 Komponent Zend_Config_Xml obsługuje także dwa inne sposoby
85 definiowania elementów w pliku konfiguracyjnym. Oba sposoby używają
86 atrybutów. Z tego względu, że atrybuty <code>extends</code> oraz
87 <code>value</code> są zastrzeżone (do rozszerzania sekcji oraz do
88 alternatywnego sposobu użycia atrybutów), nie mogą one być użyte.
89 Pierwszym sposobem użycia atrybutu jest dodanie go w elemencie
90 rodzica. Zostanie on automatycznie przełożony jako element dziecko:
92 <programlisting role="xml"><![CDATA[
95 <production webhost="www.example.com">
96 <database adapter="pdo_mysql">
97 <params host="db.example.com" username="dbuser" password="secret" dbname="dbname"/>
100 <staging extends="production">
102 <params host="dev.example.com" username="devuser" password="devsecret"/>
109 Kolejny sposób tak naprawdę nie zmniejsza objętości pliku
110 konfiguracyjnego, ale ułatwia zarządzanie nim, ponieważ eliminuje
111 konieczność pisania nazw znaczników podwójnie. Po prostu tworzysz
112 pusty znacznik, który zawiera swoją wartość wewnątrz atrybutu
115 <programlisting role="xml"><![CDATA[
116 <?xml version="1.0"?>
119 <webhost>www.example.com</webhost>
121 <adapter value="pdo_mysql"/>
123 <host value="db.example.com"/>
124 <username value="dbuser"/>
125 <password value="secret"/>
126 <dbname value="dbname"/>
130 <staging extends="production">
133 <host value="dev.example.com"/>
134 <username value="devuser"/>
135 <password value="devsecret"/>