<?xml version="1.0" encoding="UTF-8"?>
    <!-- EN-Revision: 24249 -->
    <!-- Reviewed: no -->
<sect2 id="zend.application.available-resources.frontcontroller">
    <title>Zend_Application_Resource_Frontcontroller</title>

    <para>
        Probablemente el recurso más común que se carga con
        <classname>Zend_Application</classname>
        será el recurso Front Controller
        , que proporciona la habilidad para configurar
        <classname>Zend_Controller_Front</classname>
        . Este recurso ofrece
        la posibilidad de establecer parámetros arbitrarios del Front
        Controller,
        especificar plugins para inicializar, y mucho más.
    </para>

    <para>
        Una vez inicializado, el recurso asigna la propiedad del
        <varname>$frontController</varname>
        del bootstrap a la instancia
        <classname>Zend_Controller_Front</classname>
        .
    </para>

    <para>
        Las claves de configuración disponibles incluyen las siguientes,
        sin importar si son
        mayúsculas ó minúsculas:
   </para>

    <itemizedlist>
        <listitem>
            <para>
                <emphasis>
                    <property>controllerDirectory</property>
                </emphasis>
                :: ya sea un valor de string
                especificando un único directorio controlador, o un array de
                pares de directorio módulo/controlador.
            </para>
        </listitem>

        <listitem>
            <para>
                <emphasis>
                    <property>moduleControllerDirectoryName</property>
                </emphasis>
                : un valor de string
                indicando el subdirectorio bajo el cual un módulo contiene controladores.
            </para>
        </listitem>

        <listitem>
            <para>
                <emphasis>
                    <property>moduleDirectory</property>
                </emphasis>
                : directorio bajo el cual pueden
                encontrarse los módulos.
            </para>
        </listitem>

        <listitem>
            <para>
                <emphasis>
                    <property>defaultControllerName</property>
                </emphasis>
                : Nombre base del controlador por
                defecto (normalmente, "índex").
            </para>
        </listitem>

        <listitem>
            <para>
               <emphasis><property>defaultAction</property></emphasis>
                : nombre base de la acción por defecto
                (normalmente, "índex").
            </para>
        </listitem>

        <listitem>
            <para>
                <emphasis>
                    <property>defaultModule</property>
                </emphasis>
                : nombre base del módulo por defecto
                (normalmente, "default").
            </para>
        </listitem>

        <listitem>
            <para>
                <emphasis>
                    <property>baseUrl</property>
                </emphasis>
                : base explícita a la <acronym>URL</acronym> de la aplicación
                (normalmente auto-detect).
            </para>
        </listitem>

        <listitem>
            <para>
                <emphasis>
                    <property>plugins</property>
                </emphasis>
                : array con los nombres de los plugins de las
                clases de los Front Controllers.
                El recurso instanciará a cada clase (sin argumentos al constructor)
                y luego registra la instancia con el Front Controller. If you want to
                register a plugin with a particular stack index, you need to provide an array with
                two keys <property>class</property> and <property>stackIndex</property>.

            </para>
        </listitem>

        <listitem>
            <para>
                <emphasis>
                    <property>params</property>
                </emphasis>
                : array de pares clave/valor para registrarse con
                el front controller.
            </para>
        </listitem>

                <listitem>
            <para>
                <emphasis><property>returnresponse</property></emphasis>: whether or not to return
                the response object after dispatching the front controller. Value should be a
                boolean; by default, this is disabled.
            </para>
        </listitem>

    </itemizedlist>

    <para>
        Si se ingresa una clave no reconocida, ésta será registrada como un
        parámetro de Front
        Controller pasándolo a
        <methodname>setParam()</methodname>
        .
    </para>

    <example id="zend.application.available-resources.frontcontroller.configExample">
        <title>Ejemplo Front Controller resource configuration</title>

        <para>
            A continuación,
            <acronym>INI</acronym>
            es un snippet para mostrar cómo configurar
            el recurso Front Controller.
        </para>

        <programlisting language="ini"><![CDATA[
[production]
resources.frontController.controllerDirectory = APPLICATION_PATH . "/controllers"
resources.frontController.moduleControllerDirectoryName = "actions"
resources.frontController.moduleController = APPLICATION_PATH .  "/modules"
resources.frontController.defaultControllerName = "site"
resources.frontController.defaultAction = "home"
resources.frontController.defaultModule = "static"
resources.frontController.baseUrl = "/subdir"
resources.frontController.plugins.foo = "My_Plugin_Foo"
resources.frontController.plugins.bar = "My_Plugin_Bar"
resources.frontController.plugins.baz.class = "My_Plugin_Baz"
resources.frontController.plugins.baz.stackIndex = 123
resources.frontController.returnresponse = 1
resources.frontController.env = APPLICATION_ENV

; The following proxies to:
; Zend_Controller_Action_HelperBroker::addPath('Helper_Path', $helperPrefix);
resources.frontController.actionHelperPaths.HELPER_Prefix = "My/Helper/Path"
]]></programlisting>
    </example>
    <example id="zend.application.available-resources.frontcontroller.frontControllerPropertyExample">
        <title>Recuperar el Front Controller de su arranque (bootstrap)</title>
        <para>
            Una vez que el recurso de su Front Controller ha sido inicializado,
            se puede recuperar la
            instancia de Front Controller a través de la
            propiedad
            <varname>$frontController</varname>
            de su bootstrap.
        </para>

        <programlisting language="php"><![CDATA[
$bootstrap->bootstrap('frontController');
$front = $bootstrap->frontController;
]]></programlisting>
    </example>
</sect2>
