<?xml version="1.0" encoding="UTF-8"?>
    <!-- EN-Revision: 24249 -->
    <!-- Reviewed: no -->
<sect3 id="zend.controller.actionhelpers.redirector">
    <title>Redirector</title>

    <sect4 id="zend.controller.actionhelper.redirector.introduction">
        <title>Introducción</title>

        <para> El ayudante <emphasis>Redirector</emphasis> le permite utilizar
            un objeto de redireccionamiento para cumplir con necesidades de su
            aplicación para redireccionar a una nueva <acronym>URL</acronym> .
            Ofrece numerosas ventajas sobre el método
                <methodname>_redirect()</methodname> , tales como poder
            preconfigurar un comportamiento para todo el sitio en el objeto
            redirector o usando el construido en <methodname>gotoSimple($action,
                $controller, $module, $params)</methodname> , interfaz similar a
            la de <methodname>Zend_Controller_Action::_forward()</methodname> . </para>

        <para> El <emphasis>Redirector</emphasis> tiene un número de métodos que
            pueden utilizarse para afectar el comportamiento al redireccionar: </para>

        <itemizedlist>
            <listitem>
                <para>
                    <methodname>setCode()</methodname> puede ser utilizado para
                    establecer el código de respuesta <acronym>HTTP</acronym>
                    que utilizar durante la redirección. </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>setExit()</methodname> puede usarse para forzar
                    un <methodname>exit()</methodname> tras una redirección. Por
                    defecto es verdadero ( <constant>TRUE</constant> ). </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>setGotoSimple()</methodname> puede ser utilizada
                    para establecer la <acronym>URL</acronym> que usar por
                    defecto si no se ha pasado ninguna a
                        <methodname>gotoSimple()</methodname> . Utiliza la
                        <acronym>API</acronym> de
                        <methodname>Zend_Controller_Action::_forward()</methodname>
                    : setGotoSimple($action, $controller = null, $module = null,
                    array $params = array()); </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>setGotoRoute()</methodname> puede ser utilizada
                    para establecer una <acronym>URL</acronym> basada en una
                    ruta. Pasarla en un array de pares clave/valor y un nombre
                    de ruta, y que ensamblarán la <acronym>URL</acronym> según
                    la definición y el tipo de ruta. </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>setGotoUrl()</methodname> puede ser utilizada
                    para establecer una <acronym>URL</acronym> por defecto si no
                    se pasa ninguna a <methodname>gotoUrl()</methodname> .
                    Acepta un solo string <acronym>URL</acronym> . </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>setPrependBase()</methodname> puede ser
                    utilizada para anteponer la <acronym>URL</acronym> base del
                    objeto solicitud a una <acronym>URL</acronym> especificada
                    con <methodname>setGotoUrl()</methodname> ,
                        <methodname>gotoUrl()</methodname> , o
                        <methodname>gotoUrlAndExit()</methodname> . </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>setUseAbsoluteUri()</methodname> puede ser
                    utilizada para forzar al <emphasis>Redirector</emphasis> a
                    usar <acronym>URI</acronym> s absolutas cuando está
                    redireccionando. Cuando se establece esta opción, se utiliza
                    el valor de <varname>$_SERVER['HTTP_HOST']</varname> ,
                        <varname>$_SERVER['SERVER_PORT']</varname> , y
                        <varname>$_SERVER['HTTPS']</varname> para formar una
                        <acronym>URI</acronym> completa a la
                        <acronym>URL</acronym> especificada por uno de los
                    métodos de redirección. Esta opción está desactivada por
                    defecto, pero podrá ser activada por defecto en versiones
                    posteriores. </para>
            </listitem>
        </itemizedlist>

        <para>Además, hay una variedad de métodos en el redireccionamiento para
            realizar las redirecciones actuales:</para>

        <itemizedlist>
            <listitem>
                <para>
                    <methodname>gotoSimple()</methodname> usa
                        <methodname>setGotoSimple()</methodname>
                        (<methodname>_forward()</methodname>-tipo
                        <acronym>API</acronym>) para construir una
                        <acronym>URL</acronym> y realizar un redireccionamiento.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>gotoRoute()</methodname> usa
                        <methodname>setGotoRoute()</methodname> (
                        <emphasis>route-assembly</emphasis> ) para construir una
                        <acronym>URL</acronym> y realizar un redireccionamiento.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>gotoUrl()</methodname> usa
                        <methodname>setGotoUrl()</methodname> ( <methodname>URL
                        string</methodname> ) para construir una
                        <acronym>URL</acronym> y realizar un redireccionamiento.
                </para>
            </listitem>
        </itemizedlist>

        <para> Por último, usted puede determinar la redirección actual de la
                <acronym>URL</acronym> en cualquier momento usando
                <methodname>getRedirectUrl()</methodname> . </para>
    </sect4>

    <sect4 id="zend.controller.actionhelper.redirector.basicusage">
        <title>Ejemplos Básicos de Uso</title>

        <example
            id="zend.controller.actionhelper.redirector.basicusage.example-1">
            <title>Estableciendo Opciones</title>

            <para> Este ejemplo anula varias opciones, incluido el
                establecimiento del código de estado <acronym>HTTP</acronym>
                para usar en la redirección ('303'), no saliendo por defecto en
                la redirección, y definir una <acronym>URL</acronym> a usar por
                defecto cuando se redireccione. </para>

            <programlisting language="php"><![CDATA[
class SomeController extends Zend_Controller_Action
{
    /**
     * Redirector - definido para completar el código
     *
     * @var Zend_Controller_Action_Helper_Redirector
     */
    protected $_redirector = null;

    public function init()
    {
        $this->_redirector = $this->_helper->getHelper('Redirector');

        // Establece las opciones por defecto del redirector
        // Dado que el objeto es registrado en el ayudante, éstos pasan a
        // ser relevantes para todas las acciones desde este punto en adelante

        $this->_redirector->setCode(303)
                          ->setExit(false)
                          ->setGotoSimple("this-action",
                                          "some-controller");
    }

    public function myAction()
    {
        /* hacer algunas cosas */

        // Redireccionar a una URL previamente registrada,
        // y forzar una salida cuando esté hecho:
        $this->_redirector->redirectAndExit();
        return; // nunca alcanzado
    }
}
]]></programlisting>
        </example>

        <example
            id="zend.controller.actionhelper.redirector.basicusage.example-2">
            <title>Usando Defaults</title>

            <para> Este ejemplo asume que se usan los valores predeterminados,
                lo que significa que cualquier redirección resultará en un
                    <methodname>exit()</methodname> inmediato. </para>

            <programlisting language="php"><![CDATA[
// EJEMPLO ALTERNATIVO
class AlternativeController extends Zend_Controller_Action
{
    /**
     * Redirector - definido para completar el código
     *
     * @var Zend_Controller_Action_Helper_Redirector
     */
    protected $_redirector = null;

    public function init()
    {
        $this->_redirector = $this->_helper->getHelper('Redirector');
    }

    public function myAction()
    {
        /* hacer algunas cosas */

        $this->_redirector
            ->gotoUrl('/my-controller/my-action/param1/test/param2/test2');
        return; // nunca alcanzado dado que por defecto es ir a URL y salir
    }
}
]]></programlisting>
        </example>

        <example
            id="zend.controller.actionhelper.redirector.basicusage.example-3">
            <title>Usando la API _forward() de goto()</title>

            <para> La <acronym>API</acronym>
                <methodname>gotoSimple()</methodname> imita a la de
                    <methodname>Zend_Controller_Action::_forward()</methodname>
                . La diferencia principal es que construye una
                    <acronym>URL</acronym> desde los parámetros pasados, y
                utiliza el formato por defecto
                    <methodname>:module/:controller/:action/*</methodname> del
                enrutador predeterminado. A continuación se redirecciona en
                lugar de encadenar la acción. </para>

            <programlisting language="php"><![CDATA[
class ForwardController extends Zend_Controller_Action
{
    /**
     * Redirector - definido para completar el código
     *
     * @var Zend_Controller_Action_Helper_Redirector
     */
    protected $_redirector = null;

    public function init()
    {
        $this->_redirector = $this->_helper->getHelper('Redirector');
    }

    public function myAction()
    {
        /* hacer algunas cosas */

        // Redireccionar a 'my-action' de 'my-controller' en el módulo
        // actual, usando los parámetros param1 => test y param2 => test2
        $this->_redirector->gotoSimple('my-action',
                                       'my-controller',
                                       null,
                                       array('param1' => 'test',
                                             'param2' => 'test2'
                                             )
                                       );
    }
}
]]></programlisting>
        </example>

        <example
            id="zend.controller.actionhelper.redirector.basicusage.example-4">
            <title>Usando Ruta de Ensamblaje con gotoRoute()</title>

            <para> El siguiente ejemplo usa el método
                    <methodname>assemble()</methodname> del <link
                    linkend="zend.controller.router">enrutador</link> para crear
                una URL basada en un array asociativo de parámetros pasados. Se
                supone que la siguiente ruta ha sido registrada: </para>

            <programlisting language="php"><![CDATA[
$route = new Zend_Controller_Router_Route(
    'blog/:year/:month/:day/:id',
    array('controller' => 'archive',
          'module' => 'blog',
          'action' => 'view')
);
$router->addRoute('blogArchive', $route);
]]></programlisting>

            <para> Dado un array con el año fijado a 2006, mes a 4, día a 24, e
                id a 42, entonces construye la siguiente <acronym>URL</acronym>
                <filename>/blog/2006/4/24/42</filename> . </para>

            <programlisting language="php"><![CDATA[
class BlogAdminController extends Zend_Controller_Action
{
    /**
     * Redirector - definido para completar el código
     *
     * @var Zend_Controller_Action_Helper_Redirector
     */
    protected $_redirector = null;

    public function init()
    {
        $this->_redirector = $this->_helper->getHelper('Redirector');
    }

    public function returnAction()
    {
        /* hacer algunas cosas */

        // Redireccionar al archivo blog. Construir la siguiente URL:
        // /blog/2006/4/24/42
        $this->_redirector->gotoRoute(
            array('year' => 2006,
                  'month' => 4,
                  'day' => 24,
                  'id' => 42),
            'blogArchive'
        );
    }
}
]]></programlisting>
        </example>
    </sect4>
</sect3>
