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

    <sect4 id="zend.controller.actionhelper.redirector.introduction">
        <title>Einführung</title>

        <para>
            Der <emphasis>Redirector</emphasis> Helfer erlaubt die Verwendung eines Redirector
            Objektes um die Notwendigkeiten der Anwendung für das Umleiten zu einer neuen
            <acronym>URL</acronym> zu erfüllen. Er bietet vielfache Vorteile gegenüber der
            <methodname>_redirect()</methodname> Methode. Er ist zum Beispiel fähig seitenweises
            Verhalten im Redirector Objekt vorzudefinieren oder bietet ein eingebautes
            <methodname>gotoSimple($action, $controller, $module, $params)</methodname> Interface
            ähnlich dem von <methodname>Zend_Controller_Action::_forward()</methodname>.
        </para>

        <para>
            Der <emphasis>Redirector</emphasis> hat eine Anzahl von Methoden die verwendet werden
            können um das Verhalten beim Umleiten zu beeinflussen:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <methodname>setCode()</methodname> kann verwendet werden um den
                    <acronym>HTTP</acronym> Antwort Code zu setzen der wärend des Umleitens
                    verwendet werden soll.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>setExit()</methodname> kann verwendet werden um ein
                    <methodname>exit()</methodname> nach einer Umleitung zu erzwingen.
                    Standardmäßig ist dieser <constant>TRUE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>setGotoSimple()</methodname> kann verwendet werden um eine Standard
                    <acronym>URL</acronym> zu setzen die verwendet wird wenn keine an
                    <methodname>gotoSimple()</methodname> übergeben wird. Verwendet die
                    <acronym>API</acronym> von
                    <methodname>Zend_Controller_Action::_forward()</methodname>:
                    <methodname>setGotoSimple($action, $controller = null, $module = null, array $params =
                    array())</methodname>
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>setGotoRoute()</methodname> kann verwendet werden um eine
                    <acronym>URL</acronym> basierend auf einer registrierten Route zu setzen.
                    Übergeben in einem Array von Schlüssel/Werte Paaren und einem Routernamen, wird
                    die <acronym>URL</acronym> anhand des Routertyps und der Definition
                    zusammengebaut.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>setGotoUrl()</methodname> kann verwendet werden um eine Standard
                    <acronym>URL</acronym> zu setzen die verwendet wird wenn keine an
                    <methodname>gotoUrl()</methodname> übergeben wird. Akzeptiert einen einzelnen
                    <acronym>URL</acronym> String.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>setPrependBase()</methodname> kann verwendet werden um die BasisURL
                    des Anfrage Objektes einer mit <methodname>setGotoUrl()</methodname>,
                    <methodname>gotoUrl()</methodname> oder
                    <methodname>gotoUrlAndExit()</methodname> definierten <acronym>URL</acronym>,
                    voranzustellen.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>setUseAbsoluteUri()</methodname> kann verwendet werden um den
                    <emphasis>Redirector</emphasis> dazu zu zwingen absolute
                    <acronym>URI</acronym>s zu verwenden wenn umgeleitet wird. Wenn diese Option
                    gesetzt ist, verwendet Sie den Wert von
                    <varname>$_SERVER['HTTP_HOST']</varname>,
                    <varname>$_SERVER['SERVER_PORT']</varname>, und
                    <varname>$_SERVER['HTTPS']</varname> um eine komplete <acronym>URI</acronym>
                    zur, durch eine der Umleitungsmethoden, spezifizierten <acronym>URL</acronym>
                    zu erstellen. Diese Option ist standardmäßig ausgeschaltet, kann aber in
                    späteren Releases standardmäßig eingeschaltet sein.
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Zusätzlich gibt es eine Reihe von Methoden im Redirector für die Bearbeitung der
            aktuellen Umleitungen:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <methodname>gotoSimple()</methodname> verwendet
                    <methodname>setGotoSimple()</methodname>
                    (<methodname>_forward()</methodname>-ähnliche <acronym>API</acronym>) um eine
                    <acronym>URL</acronym> zu erstellen und eine Umleitung durchzuführen.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>gotoRoute()</methodname> verwendet
                    <methodname>setGotoRoute()</methodname> (<emphasis>route-assembly</emphasis>)
                    um eine <acronym>URL</acronym> zu erstellen und eine Umleitung durchzuführen.
                </para>
            </listitem>

            <listitem>
                <para>
                    <methodname>gotoUrl()</methodname> verwendet
                    <methodname>setGotoUrl()</methodname>
                    (<emphasis><acronym>URL</acronym> string</emphasis>) um eine
                    <acronym>URL</acronym> zu erstellen und eine Umleitung durchzuführen.
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Letztendlich kann die aktuelle Umleitungs <acronym>URL</acronym> jederzeit
            festgestellt werden durch Verwendung von <methodname>getRedirectUrl()</methodname>.
        </para>
    </sect4>

    <sect4 id="zend.controller.actionhelper.redirector.basicusage">
        <title>Beispiel für die grundsätzliche Verwendung</title>

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

            <para>
                Dieses Beispiel überschreibt diverse Optionen, inklusive dem Setzen des
                <acronym>HTTP</acronym> Statuscodes und dessen Verwendung in der Umleitung ('303'),
                nicht abbrechen der Umleitung und definieren einer Standard <acronym>URL</acronym>
                die beim Umleiten verwendet wird.
            </para>

            <programlisting language="php"><![CDATA[
class SomeController extends Zend_Controller_Action
{
    /**
     * Redirector - definiert zur Komplettierung des Codes
     *
     * @var Zend_Controller_Action_Helper_Redirector
     */
    protected $_redirector = null;

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

        // Setzt die Standardoptionen für die Umleitung
        // Da das Objekt in der Helferanwendung registriert ist,
        // wird diese für alle Aktionen ab diesem Zeitpunkt relevant
        $this->_redirector->setCode(303)
                          ->setExit(false)
                          ->setGotoSimple("this-action",
                                          "some-controller");
    }

    public function myAction()
    {
        /* Mach was */

        // Umleiten zu einer vorher definierten URL, und einen Ausstieg
        // erzwingen der stattfindet sobald das getan wurde:
        $this->_redirector->redirectAndExit();
        return; // wird nie erreicht
    }
}
]]></programlisting>
        </example>

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

            <para>
                Diese Beispiel nimmt an das die Standardwerte verwendet werden, was bedeutet das
                jede Umleitung in einem sofortigen <methodname>exit()</methodname> resultiert.
            </para>

            <programlisting language="php"><![CDATA[
// ALTERNATIVES BEISPIEL
class AlternativeController extends Zend_Controller_Action
{
    /**
     * Redirector - definiert zur Komplettierung des Codes
     *
     * @var Zend_Controller_Action_Helper_Redirector
     */
    protected $_redirector = null;

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

    public function myAction()
    {
        /* Mach was */

        $this->_redirector
            ->gotoUrl('/my-controller/my-action/param1/test/param2/test2');
        return; // wird nie erreicht da standardmäßig gegangen und beendet wird
    }
}
]]></programlisting>
        </example>

        <example id="zend.controller.actionhelper.redirector.basicusage.example-3">
            <title>Verwenden von goto()'s _forward() API</title>

            <para>
                <methodname>gotoSimple()</methodname>'s <acronym>API</acronym> entspricht der von
                <methodname>Zend_Controller_Action::_forward()</methodname>. Der primäre
                Unterschied ist das Sie eine <acronym>URL</acronym> von den übergebenen Parametern
                erstellt und das Standardformat <filename>:module/:controller/:action/*</filename>
                des Standardrouters verwendet. Dann leitet es um statt die Aktion zu verketten.
            </para>

            <programlisting language="php"><![CDATA[
class ForwardController extends Zend_Controller_Action
{
    /**
     * Redirector - definiert zur Komplettierung des Codes
     *
     * @var Zend_Controller_Action_Helper_Redirector
     */
    protected $_redirector = null;

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

    public function myAction()
    {
        /* Mach was */

        // Umleiten zu 'my-action' von 'my-controller' im aktuellen Modul,
        // und verwenden der Parameter param1 => test und 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>Verwenden von Routen die mit gotoRoute() zusammengebaut wurden</title>

            <para>
                Das folgende Beispiel verwendet die <methodname>assemble()</methodname> Methode des
                <link linkend="zend.controller.router">Router's</link> um eine
                <acronym>URL</acronym> zu erstellen die auf einem assoziativen Array von Parametern
                basiert das übergeben wurde. Es nimmt an das die folgende Route registriert wurde:
            </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>
                Angenommen ein Array hat year auf 206 gesetzt, month auf 4, day auf 24, und id auf
                42, dann würde dieses eine <acronym>URL</acronym> wie die folgende erstellen:
                <filename>/blog/2006/4/24/42</filename>.
            </para>

            <programlisting language="php"><![CDATA[
class BlogAdminController extends Zend_Controller_Action
{
    /**
     * Redirector - definiert zur Komplettierung des Codes
     *
     * @var Zend_Controller_Action_Helper_Redirector
     */
    protected $_redirector = null;

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

    public function returnAction()
    {
        /* Mach was */

        // Umleiten zum Blog Archiv. Erstellt die folgende URL:
        // /blog/2006/4/24/42
        $this->_redirector->gotoRoute(
            array('year' => 2006,
                  'month' => 4,
                  'day' => 24,
                  'id' => 42),
            'blogArchive'
        );
    }
}
]]></programlisting>
        </example>
    </sect4>
</sect3>
<!--
vim:se ts=4 sw=4 et:
-->