# Redirector

## Introducción

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

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

- `setCode()` puede ser utilizado para establecer el código de respuesta HTTP que utilizar durante la redirección.

- `setExit()` puede usarse para forzar un `exit()` tras una redirección. Por defecto es verdadero ( `TRUE` ).

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

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

- `setGotoUrl()` puede ser utilizada para establecer una URL por defecto si no se pasa ninguna a `gotoUrl()` . Acepta un solo string URL .

- `setPrependBase()` puede ser utilizada para anteponer la URL base del objeto solicitud a una URL especificada con `setGotoUrl()` , `gotoUrl()` , o `gotoUrlAndExit()` .

- `setUseAbsoluteUri()` puede ser utilizada para forzar al Redirector a usar URI s absolutas cuando está redireccionando. Cuando se establece esta opción, se utiliza el valor de `$_SERVER['HTTP_HOST']` , `$_SERVER['SERVER_PORT']` , y `$_SERVER['HTTPS']` para formar una URI completa a la URL 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.

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

- `gotoSimple()` usa `setGotoSimple()` (`_forward()`-tipo API) para construir una URL y realizar un redireccionamiento.

- `gotoRoute()` usa `setGotoRoute()` ( route-assembly ) para construir una URL y realizar un redireccionamiento.

- `gotoUrl()` usa `setGotoUrl()` ( `URL string` ) para construir una URL y realizar un redireccionamiento.

Por último, usted puede determinar la redirección actual de la URL en cualquier momento usando `getRedirectUrl()` .

## Ejemplos Básicos de Uso

### Estableciendo Opciones

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

    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
        }
    }

### Usando Defaults

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

    // 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
        }
    }

### Usando la API _forward() de goto()

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

    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'
                                                 )
                                           );
        }
    }

### Usando Ruta de Ensamblaje con gotoRoute()

El siguiente ejemplo usa el método `assemble()` del enrutador para crear una URL basada en un array asociativo de parámetros pasados. Se supone que la siguiente ruta ha sido registrada:

    $route = new Zend_Controller_Router_Route(
        'blog/:year/:month/:day/:id',
        array('controller' => 'archive',
              'module' => 'blog',
              'action' => 'view')
    );
    $router->addRoute('blogArchive', $route);

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 URL `/blog/2006/4/24/42` .

    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'
            );
        }
    }