<?xml version="1.0" encoding="UTF-8"?>
    <!-- EN-Revision: 17564 -->
    <!-- Reviewed: no -->
<sect1 id="zend.config.adapters.ini">
    <title>Zend_Config_Ini</title>
    <para>
        <classname>Zend_Config_Ini</classname> permite a los desarrolladores
        almacenar datos de configuración en un formato de datos
            <acronym>INI</acronym> familiar, y leer de ellos en la aplicación
        usando una sintáxis de propiedades de objetos anidados. El formato
            <acronym>INI</acronym> se especializa en proveer tanto la habilidad
        de mantener una jerarquía de claves de datos (data keys) de
        configuración como la de mantener una jerarquía entre secciones de datos
        de configuración. Las jerarquías de datos de configuración son provistas
        separando las claves mediante el carácter punto ( "
            <emphasis>.</emphasis> " ). Una sección puede extender o heredar de
        otra sección indicando el nombre de la sección seguido de dos puntos ( "
            <emphasis>:</emphasis> " ) y el nombre de la sección desde la cual
        se quieren heredar los datos. </para>
    <note>
        <title>parse_ini_file</title>
        <para>
            <classname>Zend_Config_Ini</classname> utiliza la función <ulink
                url="http://php.net/parse_ini_file">
                <methodname>parse_ini_file()</methodname>
            </ulink> de <acronym>PHP</acronym> . Por favor, revise esta
            documentación para observar sus comportamientos específicos, que se
            propagan a <classname>Zend_Config_Ini</classname> , tales como la
            forma en que los valores especiales: " <constant>TRUE</constant> " ,
            " <constant>FALSE</constant> " , "yes" , "no" , y
                <constant>NULL</constant> son manejados. </para>
    </note>
    <note>
        <title>Separador de clave</title>
        <para> Por defecto, el carácter separador de clave es el punto ( "
                <emphasis>.</emphasis> " ). Puede ser reemplazado, no
            obstante,cambiando la clave de <varname>$options</varname> llamada
                <property>nestSeparator</property> al construir el objeto
                <classname>Zend_Config_Ini</classname> . Por ejemplo:
        </para>
            <programlisting language="php"><![CDATA[
$options['nestSeparator'] = ':';
$config = new Zend_Config_Ini('/path/to/config.ini',
                              'pruebas',
                              $options);
]]></programlisting>

    </note>
    <example id="zend.config.adapters.ini.example.using">
        <title>Utilizando Zend_Config_Ini</title>
        <para> Este ejemplo muestra una forma de uso básica de
                <classname>Zend_Config_Ini</classname> para cargar datos de
            configuración de un archivo <acronym>INI</acronym> . En este ejemplo
            hay datos de configuración tanto para un sistema de producción como
            para un sistema en fase de pruebas. Debido a que los datos de la
            fase de pruebas son muy parecidos a los de producción, la sección de
            pruebas hereda de la sección de producción. En este caso, la
            decisión es arbitraria y podría haberse escrito a la inversa, con la
            sección de producción heredando de la sección de pruebas, a pesar de
            que éste no sería el caso para situaciones más complejas.
            Supongamos, entonces, que los siguientes datos de configuración
            están contenidos en <filename>/path/to/config.ini</filename> : : </para>
        <programlisting language="ini"><![CDATA[
; Datos de configuración de la web de producción
[produccion]
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   = dbname

; Los datos de configuración de la fase de pruebas heredan de la producción
; y sobreescribren valores si es necesario
[pruebas : produccion]
database.params.host     = dev.example.com
database.params.username = devuser
database.params.password = devsecret
]]></programlisting>
        <para> Ahora, asuma que el desarrollador de aplicaciones necesita los
            datos de configuración de la etapa de pruebas del archivo
                <acronym>INI</acronym> . Resulta fácil cargar estos datos
            especificando el archivo <acronym>INI</acronym> en la sección de la
            etapa de pruebas: </para>
        <programlisting language="php"><![CDATA[
$config = new Zend_Config_Ini('/path/to/config.ini', 'pruebas');

echo $config->database->params->host;   // muestra "dev.example.com"
echo $config->database->params->dbname; // muestra "dbname"
]]></programlisting>
    </example>
    <note>
        <table id="zend.config.adapters.ini.table">
            <title>Parámetros del constructor Zend_Config_Ini</title>
            <tgroup cols="2">
                <thead>
                    <row>
                        <entry>Parámetros</entry>
                        <entry>Notas</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>
                            <varname>$filename</varname>
                        </entry>
                        <entry> El archivo <acronym>INI</acronym> que se va a
                            cargar. </entry>
                    </row>
                    <row>
                        <entry>
                            <varname>$section</varname>
                        </entry>
                        <entry> La [sección] contenida en el archivo
                                <acronym>INI</acronym> que se va a cargar. Fijar
                            este parámetro a <constant>NULL</constant> cargará
                            todas las secciones. Alternativamente, se puede
                            introducir un array de nombres de sección para
                            cargar multiples secciones. </entry>
                    </row>
                    <row>

                        <entry>
                            <varname>$options</varname> (default
                                <constant>FALSE</constant> ) </entry>

                        <entry> Array de opciones. Las siguientes claves están
                            aceptadas: <itemizedlist>
                                <listitem>
                                    <para>
                                        <emphasis>
                                        <property>allowModifications</property>
                                        </emphasis> : : Fijar a
                                        <constant>TRUE</constant> para permitir
                                        modificaciones subsiguientes del archivo
                                        cargado. Por defecto es
                                        <constant>NULL</constant>
                                    </para>
                                </listitem>
                                <listitem>
                                    <para>
                                        <emphasis>
                                        <property>nestSeparator</property>
                                        </emphasis> : Carácter que utilizar como
                                        separador de anidamiento. Por defecto es
                                        "." </para>
                                </listitem>
                            </itemizedlist>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </note>
</sect1>
