1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
|
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 24604 -->
<!-- Reviewed: no -->
<sect1 id="zend.config.writer.introduction">
<title>Zend_Config_Writer</title>
<para>
<classname>Zend_Config_Writer</classname> vous donne la possibilité d'écrire des
fichiers de configuration à partir d'objets <classname>Zend_Config</classname>. Il
fonctionne avec des adaptateurs détachés du système et est donc très simple à utiliser. Par
défaut <classname>Zend_Config_Writer</classname> embarque trois adaptateurs, qui
fonctionnent tous sur la base de fichiers. Vous instanciez un rédacteur ("writer") avec des
options spécifiques, qui peuvent être <emphasis>filename</emphasis> et
<emphasis>config</emphasis>. Ensuite
vous pouvez appeler la méthode <methodname>write()</methodname> du rédacteur et le fichier
de configuration est créé. Vous pouvez aussi fournir <varname>$filename</varname> et
<varname>$config</varname> directement à la méthode <methodname>write()</methodname>.
Actuellement les
rédacteurs suivants sont embarqués avec <classname>Zend_Config_Writer</classname> :
</para>
<itemizedlist>
<listitem>
<para><classname>Zend_Config_Writer_Array</classname></para>
</listitem>
<listitem>
<para><classname>Zend_Config_Writer_Ini</classname></para>
</listitem>
<listitem>
<para><classname>Zend_Config_Writer_Json</classname></para>
</listitem>
<listitem>
<para><classname>Zend_Config_Writer_Xml</classname></para>
</listitem>
<listitem>
<para><classname>Zend_Config_Writer_Yaml</classname></para>
</listitem>
</itemizedlist>
<para>
Lors de la modification ou la création d'objet <classname>Zend_Config</classname>, il
y a quelques informations à garder en mémoire. Pour créer ou modifier une valeur, vous
appelez simplement le réglage d'un paramètre d'un objet <classname>Zend_Config</classname>
grâce à l'accesseur de paramètre ("<emphasis>-></emphasis>"). Pour créer une section à
la racine ou pour créer une branche, vous avez juste à créer un nouveau tableau
(<command>$config->branch = array();</command>). Pour définir quelle section en étend
une autre, vous devez appeler la méthode <methodname>setExtend()</methodname> sur l'objet
<classname>Zend_Config</classname> racine.
</para>
<example id="zend.config.writer.example.using">
<title>Utilisation de Zend_Config_Writer</title>
<para>
Cet exemple illustre une utilisation basique
<classname>Zend_Config_Writer_Xml</classname> pour créer un nouveau fichier de
configuration :
</para>
<programlisting language="php"><![CDATA[
// Créer l'objet de configuration
$config = new Zend_Config(array(), true);
$config->production = array();
$config->staging = array();
$config->setExtend('staging', 'production');
$config->production->db = array();
$config->production->db->hostname = 'localhost';
$config->production->db->username = 'production';
$config->staging->db = array();
$config->staging->db->username = 'staging';
// Ecrire le fichier de l'une des manières suivantes :
// a)
$writer = new Zend_Config_Writer_Xml(array('config' => $config,
'filename' => 'config.xml'));
$writer->write();
// b)
$writer = new Zend_Config_Writer_Xml();
$writer->setConfig($config)
->setFilename('config.xml')
->write();
// c)
$writer = new Zend_Config_Writer_Xml();
$writer->write('config.xml', $config);
]]></programlisting>
<para>
Ceci créera un fichier de configuration <acronym>XML</acronym> avec les sections
"production" et "staging", où "staging" étend "production".
</para>
</example>
<example id="zend.config.writer.modifying">
<title>Modifier une configuration existante</title>
<para>
Cet exemple montre comment modifier un fichier de configuration
existant :
</para>
<programlisting language="php"><![CDATA[
// Charger toutes les sections d'un fichier de configuration existant,
// tout en évitant les sections étendues.
$config = new Zend_Config_Ini('config.ini',
null,
array('skipExtends' => true,
'allowModifications' => true));
// Modifier une valeur
$config->production->hostname = 'foobar';
// Ecrire le fichier
$writer = new Zend_Config_Writer_Ini(array('config' => $config,
'filename' => 'config.ini'));
$writer->write();
]]></programlisting>
</example>
<note>
<title>Chargement d'un fichier de configuration</title>
<para>
Lors du chargement d'un fichier de configuration existant afin de le modifier, il
est très important de charger toutes les sections et d'éviter les sections étendues,
évitant ainsi toute fusion de valeurs. Ceci est réalisé en fournissant l'option
<emphasis>skipExtends</emphasis> au constructeur.
</para>
</note>
<para>
Pour tous les rédacteurs à base de fichiers (<acronym>INI</acronym>,
<acronym>JSON</acronym>, <acronym>XML</acronym>, <acronym>YAML</acronym>,
et tableau <acronym>PHP</acronym>), en interne la méthode <methodname>render()</methodname>
est utilisée pour construire la chaîne de configuration. Cette méthode peut être utilisée
en dehors de la classe si vous souhaitez accéder à une représentation textuelle de vos
données de configuration.
</para>
<sect2 id="zend.config.writer.introduction.ini-notes">
<title>Notes spécifiques au rédacteur INI</title>
<itemizedlist>
<listitem>
<para>
Le rédacteur <acronym>INI</acronym> possède deux modes de rendu en fonction des
sections. Par défaut la configuration de premier niveau est toujours écrite
dans des noms de section. En appelant
<command>$writer->setRenderWithoutSections();</command>, toutes les options
sont écrites dans l'espace de noms global du fichier <acronym>INI</acronym>
et aucune section n'est appliquée.
</para>
</listitem>
<listitem>
<para>
De plus, <classname>Zend_Config_Writer_Ini</classname> a un
paramètre optionnel additionnel <emphasis>nestSeparator</emphasis>, définissant
le caractère séparant les profondeurs d'imbrication. Par défaut il s'agit
du point, comme <classname>Zend_Config_Ini</classname> l'accepte par défaut.
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 id="zend.config.writer.introduction.yaml-notes">
<title>Notes spécifiques au rédacteur YAML</title>
<para>
Le rédacteur <acronym>YAML</acronym> vous permet de spécifier un encodeur
<acronym>YAML</acronym> alternatif. Dans la plupart des cas, celui embarqué dans
le framework suffira amplement. Si vous le trouvez insuffisant, ou que vous souhaitez
une YAML plus avancé, vous pouvez fournir un autre encodeur.
</para>
<para>
La mthode pour le faire est
<methodname>Zend_Config_Writer_Yaml::setYamlEncoder()</methodname>, vous devez lui
fournir un callback valide.
</para>
<programlisting language="php"><![CDATA[
// Use the Symfony Yaml Component:
$writer = new Zend_Config_Writer_Yaml($filename);
$writer->setYamlEncoder(array('sfYaml', 'dump'));
]]></programlisting>
<para>
Ci-dessus nous utilisons le composant de Symfony <classname>sfYaml</classname> pour
encoder la configuration en <acronym>YAML</acronym>.
</para>
</sect2>
</sect1>
|