# Redirector

## Introduction

L'aide `Redirector` vous permet d'utiliser un objet de redirection qui remplit tous les besoins de votre application, nécessaires à une redirection vers une nouvelle URL. Il fournit de nombreux avantages par rapport à la méthode `_redirect()`, comme la capacité de préconfigurer le comportement du site dans l'objet `Redirector` ou d'utiliser l'interface intégrée `gotoSimple($action, $controller, $module, $params)` similaire à `Zend_Controller_Action::_forward()`.

`Redirector` possède une certain nombre de méthodes qui peuvent être utilisées pour affecter le comportement de la redirection :

- `setCode()` peut être utilisée pour paramétrer le code HTTP de la réponse à utiliser pendant la redirection.

- `setExit()` peut être utilisée pour forcer un `exit()` juste après la redirection. Par défaut ceci vaut `TRUE`.

- `setGotoSimple()` peut être utilisée pour paramétrer l'URL par défaut à utiliser si aucune n'est fournie à `gotoSimple()`. Elle utilise les API de `Zend_Controller_Action::_forward()` : `setGotoSimple($action, $controller = null, $module = null, array $params = array());`

- `setGotoRoute()` peut être utilisée pour paramétrer une URL basée sur une route enregistrée. Fournissez un tableau de paires clé/valeur et une route nommée, et elle assemblera une URL suivant le type de la route et sa définition.

- `setGotoUrl()` peut être utilisée pour paramétrer l'URL par défaut à utiliser si aucune n'est fournie à `gotoUrl()`. Accepte une chaîne unique correspondant à une URL.

- `setPrependBase()` peut être utilisée pour ajouter une chaîne au début de l'URL de base de l'objet requête pour les URLs spécifiées avec `setGotoUrl()`, `gotoUrl()`, ou `gotoUrlAndExit()`.

- `setUseAbsoluteUri()` peut être utilisée pour forcer le `Redirector` à utiliser des URI absolus pour la redirection. Quand cette option est choisie, elle utilise les valeurs de `$_SERVER['HTTP_HOST']`, `$_SERVER['SERVER_PORT']`, et `$_SERVER['HTTPS']` pour former un URI complet à partir de l'URL spécifiée par une des méthodes de redirection. Cette option est inactive par défaut, mais pourra être activée par défaut dans les prochaines releases.

De plus, il y a une variété de méthodes dans le `Redirector` pour réaliser les redirections actuelles :

- `gotoSimple()` utilise `setGotoSimple()` (`API de type _forward()`) pour construire une URL et réaliser une redirection.

- `gotoRoute()` utilise `setGotoRoute()` (`assemblage de route`) pour construire une URL et réaliser une redirection.

- `gotoUrl()` utilise `setGotoUrl()` (`URL sous forme de chaîne`) pour construire une URL et réaliser une redirection.

Enfin, vous pouvez déterminer l'URL de la redirection courante à tout moment en utilisant `getRedirectUrl()`.

## Exemples d'utilisation basique

### Options de réglage

Cet exemple surcharge de multiples options, incluant le réglage du code de statut HTTP à utiliser dans la redirection ("303"), le retrait du `exit` par défaut après la redirection, et la définition d'une URL par défaut à utiliser lors d'une redirection.

    class SomeController extends Zend_Controller_Action
    {
        /**
         * Redirector - défini pour l'auto-complétion
         *
         * @var Zend_Controller_Action_Helper_Redirector
         */
        protected $_redirector = null;

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

            // Régle les options par défaut pour le redirector
            // Puisque l'objet est enregistré dans le gestionnaire d'aide,
            // ceci sera effectif pour toutes les actions réalisées après
            // ce point
            $this->_redirector->setCode(303)
                              ->setExit(false)
                              ->setGotoSimple("this-action", "some-controller");
        }

        public function myAction()
        {
            /* Faire quelquechose */

            // Redirige vers une URL enregistrée précédemment,
            // et force une sortie pour finir
            $this->_redirector->redirectAndExit();
            return; // jamais atteint
        }
    }

### Utiliser les valeurs par défaut

Cet exemple suppose que vous utilisez les paramètres par défaut, ce qui inclut que toute redirection sera suivie d'un `exit()` immédiat.

    // EXEMPLE ALTERNATIF
    class AlternativeController extends Zend_Controller_Action
    {
        /**
         * Redirector - défini pour l'auto-complétion
         *
         * @var Zend_Controller_Action_Helper_Redirector
         */
        protected $_redirector = null;

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

        public function myAction()
        {
            /* Faire quelquechose */

            $url = '/my-controller/my-action/param1/test/param2/test2';
            $this->_redirector->gotoUrl($url);
            return;
            // jamais atteint puisque les paramètres par défaut
            // sont à goto et exit
        }
    }

### Utilisation de l'API _forward() de goto()

L'API de `gotoSimple()` imite celle de `Zend_Controller_Action::_forward()`. La différence principale est qu'elle construit une URL à partir des paramètres fournis, et du format de route par défaut `:module/:controller/:action/*` du routeur. Il réalise alors une redirection au lieu d'enchaîner l'action.

    class ForwardController extends Zend_Controller_Action
    {
        /**
         * Redirector - défini pour l'auto-complétion
         *
         * @var Zend_Controller_Action_Helper_Redirector
         */
        protected $_redirector = null;

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

        public function myAction()
        {
            /* Faire quelquechose */

            // Redirige vers 'my-action' de 'my-controller' dans le module
            // courant en utilisant les paramètres :
            // param1 => test et param2 => test2
            $this->_redirector->gotoSimple('my-action',
                                           'my-controller',
                                           null,
                                           array('param1' => 'test',
                                                 'param2' => 'test2'));
        }
    }

### Utilisation de l'assemblage de la route avec gotoRoute()

L'exemple suivant utilise la méthode `assemble()` du routeurpour créer une URL basée sur un tableau associatif de paramètres fournis. Il suppose que la route suivante a été enregistrée :

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

En donnant un tableau avec l'année réglée à 2006, le mois à 4, le jour à 24 et l'ID à 42, il construira l'URL `/blog/2006/4/24/42`.

    class BlogAdminController extends Zend_Controller_Action
    {
        /**
         * Redirector - défini pour l'auto-complétion
         *
         * @var Zend_Controller_Action_Helper_Redirector
         */
        protected $_redirector = null;

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

        public function returnAction()
        {
            /* Faire quelquechose */

            // Redirige vers les archives de blog. Construit l'URL suivante:
            // /blog/2006/4/24/42
            $this->_redirector->gotoRoute(
                array('year' => 2006, 'month' => 4, 'day' => 24, 'id' => 42),
                'blogArchive'
            );
        }
    }