<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect2 id="zend.navigation.pages.mvc">
    <title>Zend_Navigation_Page_Mvc</title>

    <para>
        Les pages de type <acronym>MVC</acronym> utilisent des paramètres <acronym>MVC</acronym>
        issus du composant <classname>Zend_Controller</classname>. Une page <acronym>MVC</acronym> utilisera
        en interne <classname>Zend_Controller_Action_Helper_Url</classname> dans la méthode
        <methodname>getHref()</methodname> pour générer des cibles (hrefs), et la méthode
        <methodname>isActive()</methodname> utilisera les paramètres issus de
        <classname>Zend_Controller_Request_Abstract</classname> et les comparera aux paramètres
        internes à la page.
    </para>

    <table id="zend.navigation.pages.mvc.options">
        <title>Options des pages de type MV</title>
        <tgroup cols="4">
            <thead>
                <row>
                    <entry>Clé</entry>
                    <entry>Type</entry>
                    <entry>Valeur par défaut</entry>
                    <entry>Description</entry>
                </row>
            </thead>
            <tbody>
                <row>
                    <entry><code>action</code></entry>
                    <entry><type>chaine</type></entry>
                    <entry><constant>NULL</constant></entry>
                    <entry>
                        Nom de l'action pour générer des cibles vers la page.
                    </entry>
                </row>
                <row>
                    <entry><code>controller</code></entry>
                    <entry><type>chaine</type></entry>
                    <entry><constant>NULL</constant></entry>
                    <entry>
                        Nom du contrôleur pour générer des cibles vers la page.
                    </entry>
                </row>
                <row>
                    <entry><code>module</code></entry>
                    <entry><type>chaine</type></entry>
                    <entry><constant>NULL</constant></entry>
                    <entry>
                        Nom du module pour générer des cibles vers la page.
                    </entry>
                </row>
                <row>
                    <entry><code>params</code></entry>
                    <entry><type>Array</type></entry>
                    <entry><methodname>array()</methodname></entry>
                    <entry>
                        Paramètres utilisateurs pour générer des cibles vers la page.
                    </entry>
                </row>
                <row>
                    <entry><code>route</code></entry>
                    <entry><type>chaine</type></entry>
                    <entry><constant>NULL</constant></entry>
                    <entry>
                        Nom de la route à utiliser pour générer des cibles vers la page.
                    </entry>
                </row>
                <row>
                    <entry><code>reset_params</code></entry>
                    <entry><code>bool</code></entry>
                    <entry><constant>TRUE</constant></entry>
                    <entry>
                        Remettre à zéro les paramètres de la route ou non.
                    </entry>
                </row>
            </tbody>
        </tgroup>
    </table>

    <note>
        <para>
            Les trois exemples qui suivent supposent une configuration <acronym>MVC</acronym> par défaut,
            avec une route <code>default</code>.
        </para>

        <para>
            L'<acronym>URI</acronym> retournée est relative au <code>baseUrl</code> de
            <classname>Zend_Controller_Front</classname>. Dans nos exemples, le baseUrl vaut
            '/' pour simplifier.
        </para>
    </note>

    <example id="zend.navigation.pages.mvc.example.getHref">
        <title>getHref() génères les URI de la page</title>

        <para>
            Cet exemple montre que les pages de type <acronym>MVC</acronym> utilisent
            <classname>Zend_Controller_Action_Helper_Url</classname> en interne pour générer
            les <acronym>URI</acronym>s suite à l'appel à <code>$page->getHref()</code>.
        </para>

        <programlisting language="php"><![CDATA[
// getHref() retourne /
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'index',
    'controller' => 'index'
));

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

// getHref() retourne /blog/post/view/id/1337
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog',
    'params'     => array('id' => 1337)
));
]]></programlisting>
    </example>

    <example id="zend.navigation.pages.mvc.example.isActive">
        <title>isActive() détermine si la page est active</title>

        <para>
            Cet exemple montre que les pages de type <acronym>MVC</acronym> utilisent l'objet de
            requête afin de déterminer si elles sont actives ou non.
        </para>

        <programlisting language="php"><![CDATA[
/*
 * Requête dispatchée:
 * - 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(); // retourne true
$page2->isActive(); // retourne false

/*
 * Requête dispatchée:
 * - module:     blog
 * - controller: post
 * - action:     view
 * - id:         1337
 */
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog'
));

// retourne true, car la requpete a le même trio module/controller/action
$page->isActive();

/*
 * Requête dispatchée:
 * - module:     blog
 * - controller: post
 * - action:     view
 */
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog',
    'params'     => array('id' => null)
));

// retourne false, car page a besoin du paramètre id dans la requête
$page->isActive(); // retourne false
]]></programlisting>
    </example>

    <example id="zend.navigation.pages.mvc.example.routes">
        <title>Utiliser les routes</title>

        <para>
            Les routes sont utilisables dans les pages de type <acronym>MVC</acronym>. Si une page a une route,
            elle sera utilisée par <methodname>getHref()</methodname> pour générer l'<acronym>URL</acronym>
            de la page.
        </para>

        <para>
            <note>
                <para>
                    Notez que si vous utilisez le paramètre <code>route</code>, vous devrez
                    préciser les paramètres par défaut de la route
                    (module, controller, action, etc.), autremant <methodname>isActive()</methodname>
                    ne pourra déterminer si la page est active ou pas. La raison est qu'il n'existe
                    actuellement aucune méthode permettant de récupérer les paramètres par défaut
                    d'une route un objet <classname>Zend_Controller_Router_Route_Interface</classname>,
                    ni même de récupérer la route courante depuis un objet
                    <classname>Zend_Controller_Router_Interface</classname>.
                </para>
            </note>
        </para>

        <programlisting language="php"><![CDATA[
// La route suivante est ajoutée au routeur de ZF
Zend_Controller_Front::getInstance()->getRouter()->addRoute(
    'article_view', // nom de la route
    new Zend_Controller_Router_Route(
        'a/:id',
        array(
            'module'     => 'news',
            'controller' => 'article',
            'action'     => 'view',
            'id'         => null
        )
    )
);

// Une page est créee avec un paramètre 'route'
$page = new Zend_Navigation_Page_Mvc(array(
    'label'      => 'A news article',
    'route'      => 'article_view',
    'module'     => 'news',    // requis pour isActive(), voyez les notes ci-dessus
    'controller' => 'article', // requis pour isActive(), voyez les notes ci-dessus
    'action'     => 'view',    // requis pour isActive(), voyez les notes ci-dessus
    'params'     => array('id' => 42)
));

// retourne: /a/42
$page->getHref();
]]></programlisting>
    </example>
</sect2>