# Zend_Navigation_Page_Mvc

MVC Seiten werden definiert indem MVC Parameter verwendet werden wie von der `Zend_Controller` Komponent bekannt. Eine MVC Seite wird intern in der `getHref()` Methode `Zend_Controller_Action_Helper_Url` verwenden um hrefs zu erstellen, und die `isActive()` Methode wird die Parameter von `Zend_Controller_Request_Abstract` mit den Seiten Parametern verknüpfen um zu erkennen ob die Seite aktiv ist.

## MVC Seiten Optionen

Schlüssel | Typ | Standardwert | Beschreibung
--- | --- | --- | ---
`action` | String | `NULL` | Name der Aktion die verwendet wird wenn eine href zur Seite erstellt wird.
`controller` | String | `NULL` | Name des Controllers der verwendet wird wenn eine href zur Seite erstellt wird.
`module` | String | `NULL` | Name des Moduls das verwendet wird wenn eine href zur Seite erstellt wird.
`params` | Array | `array()` | Benutzer Parameter die verwendet werden wenn eine href zur Seite erstellt wird.
`route` | String | `NULL` | Name der Route die verwendet wird wenn eine href zur Seite erstellt wird.
`reset_params` | `bool` | `TRUE` | Ob Benutzer Parameter zurückgesetzt werden sollen wenn eine href zur Seite erstellt wird.

Die drei Beispiele anbei nehmen ein Standard MVC Setup an mit der `default` Route an.

Die zurückgegebene URI ist relativ zur `baseUrl` in `Zend_Controller_Front`. Im Beispiel ist die baseUrl der Einfachheit halber '/'.

## getHref() erstellt die Seiten URI

Dieses Beispiel zeigt das MVC Seiten intern `Zend_Controller_Action_Helper_Url` verwenden um URIs zu erstellen wenn `$page->getHref()` aufgerufen wird.

    // getHref() gibt / zurück
    $page = new Zend_Navigation_Page_Mvc(array(
        'action'     => 'index',
        'controller' => 'index'
    ));

    // getHref() gibt /blog/post/view zurück
    $page = new Zend_Navigation_Page_Mvc(array(
        'action'     => 'view',
        'controller' => 'post',
        'module'     => 'blog'
    ));

    // getHref() gibt /blog/post/view/id/1337 zurück
    $page = new Zend_Navigation_Page_Mvc(array(
        'action'     => 'view',
        'controller' => 'post',
        'module'     => 'blog',
        'params'     => array('id' => 1337)
    ));

## isActive() erkennt ob eine Seite aktiv ist

Dieses Beispiel zeigt das MVC Seiten erkennen ob sie aktiv sind indem die Parameter verwendet werden die im Anfrage Objekt gefunden werden.

    /*
     * Ausgeführte Anfrage:
     * - module:     default
     * - controller: index
     * - action:     index
     */
    $page1 = new Zend_Navigation_Page_Mvc(array(
        'action'     => 'index',
        'controller' => 'index'
    ));

    $page2 = new Zend_Navigation_Page_Mvc(array(
        'action'     => 'bar',
        'controller' => 'index'
    ));

    $page1->isActive(); // returns true
    $page2->isActive(); // returns false

    /*
     * Ausgeführte Anfrage:
     * - module:     blog
     * - controller: post
     * - action:     view
     * - id:         1337
     */
    $page = new Zend_Navigation_Page_Mvc(array(
        'action'     => 'view',
        'controller' => 'post',
        'module'     => 'blog'
    ));

    // Gibt true zurück, weil die Anfrage die gleichen Module, Controller
    // und Aktion hat
    $page->isActive();

    /*
     * Ausgefürte Anfrage:
     * - module:     blog
     * - controller: post
     * - action:     view
     */
    $page = new Zend_Navigation_Page_Mvc(array(
        'action'     => 'view',
        'controller' => 'post',
        'module'     => 'blog',
        'params'     => array('id' => null)
    ));

    // Gibt false zurück weil die Seite den id Parameter in der
    // Anfrage gesetzt haben muß
    $page->isActive(); // gibt false zurück

## Routen verwenden

Routen können mit MVC Seite verwendet werden. Wenn eine Seite eine Route hat, wird diese Route in `getHref()` verwendet um die URL für die Seite zu erstellen.

Beachte, das wenn die `route` Eigenschaft in einer Seite verwendet wird, man auch die Standard Parameter spezifizieren sollte die diese Route definieren (module, controller, action, usw.), andernfalls ist die `isActive()` Methode nicht dazu in der Lage zu erkennen ob die Seite aktiv ist oder nicht. Der Grund hierfür ist, das es aktuell keinen Weg gibt die Standardparameter von einem `Zend_Controller_Router_Route_Interface` Objekt zu erhalten, oder die aktuelle Route von einem `Zend_Controller_Router_Interface` Objekt.

    // Die folgende Route wird den ZF Router hinzugefügt
    Zend_Controller_Front::getInstance()->getRouter()->addRoute(
        'article_view', // route name
        new Zend_Controller_Router_Route(
            'a/:id',
            array(
                'module'     => 'news',
                'controller' => 'article',
                'action'     => 'view',
                'id'         => null
            )
        )
    );

    // Eine Seite wird mit der 'route' Option erstellt
    $page = new Zend_Navigation_Page_Mvc(array(
        'label'      => 'A news article',
        'route'      => 'article_view',
        'module'     => 'news',    // wird für isActive() benötigt, siehe oben
        'controller' => 'article', // wird für isActive() benötigt, siehe oben
        'action'     => 'view',    // wird für isActive() benötigt, siehe oben
        'params'     => array('id' => 42)
    ));

    // Gibt /a/42 zurück
    $page->getHref();