<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.cache.cache.manager">
    <title>Le gestionnaire de Cache</title>

    <para>
        Une application comporte par nature plusieurs caches de types différents fonctions du
        contrôleur ou du modèle accédé. Afin de faciliter la création et la manipulation des
        options de <classname>Zend_Cache</classname> au plus tôt (par exemple en bootstrap),
        <classname>Zend_Cache_Manager</classname> a été créée. Cette
        classe est accompagnée de <classname>Zend_Application_Resource_Cachemanager</classname>
        pour tout ce qui concerne le bootstrap et
        <classname>Zend_Controller_Action_Helper_Cache</classname> afin d'accéder aux caches
        depuis les contrôleurs et autres aides d'action.
    </para>

    <para>
        Le gestionnaire de cache utilise des templates, ce sont en fait des ensembles de
        configurations valides pour un cache. Ces templates s'enregistrent grâce à
        <methodname>Zend_Cache_Manager::setCacheTemplate()</methodname> et ne donnent naissance
        à un objet de cache que lorsque <methodname>Zend_Cache_Manager::getCache()</methodname>
        sera appelée.
    </para>

    <programlisting language="php"><![CDATA[
$manager = new Zend_Cache_Manager;

$dbCache = array(
    'frontend' => array(
        'name' => 'Core',
        'options' => array(
            'lifetime' => 7200,
            'automatic_serialization' => true
        )
    ),
    'backend' => array(
        'name' => 'Core',
        'options' => array(
            'cache_dir' => '/path/to/cache'
        )
    )
);

$manager->setCacheTemplate('database', $dbCache);

/**
 * Partout ailleurs où le gestionnaire de cache est accessible...
 */
$databaseCache = $manager->getCache('database');
]]></programlisting>

    <para>
        Le gestionnaire autorise aussi l'enregistrement d'objets de cache préalablement
        créés, ceci grâce à la méthode <methodname>Zend_Cache_Manager::setCache()</methodname>.
    </para>

    <programlisting language="php"><![CDATA[
$frontendOptions = array(
   'lifetime' => 7200,
   'automatic_serialization' => true
);

$backendOptions = array(
    'cache_dir' => '/path/to/cache'
);

$dbCache = Zend_Cache::factory('Core',
                             'File',
                             $frontendOptions,
                             $backendOptions);

$manager = new Zend_Cache_Manager;
$manager->setCache('database', $dbCache);

/**
 * Partout ailleurs où le gestionnaire de cache est accessible...
 */
$databaseCache = $manager->getCache('database');
]]></programlisting>

    <para>
        Si vous n'êtes pas sûr si le gestionnaire possède en lui un template de configuration
        ou un objet de cache déja enregistré, vérifiez celà grâce à
        <methodname>Zend_Cache_Manager::hasCache()</methodname>.
    </para>

    <programlisting language="php"><![CDATA[
$manager = new Zend_Cache_Manager;

$dbCache = array(
    'frontend' => array(
        'name' => 'Core',
        'options' => array(
            'lifetime' => 7200,
            'automatic_serialization' => true
        )
    ),
    'backend' => array(
        'name' => 'Core',
        'options' => array(
            'cache_dir' => '/path/to/cache'
        )
    )
);

$manager->setCacheTemplate('database', $dbCache);

/**
 * Partout ailleurs où le gestionnaire de cache est accessible...
 */
if ($manager->hasCache('database')) {
    $databaseCache = $manager->getCache('database');
} else {
    // Créer un cache à la main puisque non trouvé dans le gestionnaire
}
]]></programlisting>

    <para>
        Dans certains cas, vous pouvez avoir défini un certain de cas d'utilisation avec
        <classname>Zend_Cache_Manager</classname>, mais vous avez besoin de préciser un option
        dans un cas particulier. Il est alors possible de modifier la configuration d'un template
        de cache après l'avoir saisie, ceci au moyen de
        <methodname>Zend_Cache_Manager::setTemplateOptions()</methodname>.
    </para>

    <programlisting language="php"><![CDATA[
$manager = new Zend_Cache_Manager;

$dbCache = array(
    'frontend' => array(
        'name' => 'Core',
        'options' => array(
            'lifetime' => 7200,
            'automatic_serialization' => true
        )
    ),
    'backend' => array(
        'name' => 'Core',
        'options' => array(
            'cache_dir' => '/path/to/cache'
        )
    )
);

$manager->setCacheTemplate('database', $dbCache);

/**
 * Partout ailleurs où le gestionnaire de cache est accessible...
 * Ici nous changeons le support de stockage vers Memcache plutôt que ce
 * qu'il était avant : File.
 */
$fineTuning = array(
    'backend' => array(
        'name' => 'Memcached',
        'options' => array(
            'servers' => array(
                array(
                    'host' => 'localhost',
                    'port' => 11211,
                    'persistent' => true,
                    'weight' => 1,
                    'timeout' => 5,
                    'retry_interval' => 15,
                    'status' => true,
                    'failure_callback' => ''
                )
            )
        )
    )
);
$manager->setTemplateOptions('database', $fineTuning);
$databaseCache = $manager->getCache('database');
]]></programlisting>

    <para>
        Pour rendre le gestionnaire de cache plus utile, il est accompagné de
        <classname>Zend_Application_Resource_Cachemanager</classname> et
        <classname>Zend_Controller_Action_Helper_Cache</classname>. Toutes deux sont décrites
        dans leurs pages respectives de la documentation.
    </para>

    <para>
        Aussi, <classname>Zend_Cache_Manager</classname> inclut déjà trois modèles prédéfinis,
        "default", "page" et "pagetag". Le cache "default" utilise des fichiers
        comme stockage et un Core comme frontend. Les 2 autres caches sont utilisés avec des
        pages statiques dans lesquelles du
        <acronym>HTML</acronym>, <acronym>XML</acronym> ou encore <acronym>JSON</acronym>
        peut être stocké dans des fichiers statiques dans <filename>/public</filename>.
        Le contrôle sur les pages statiques est assuré par
        <classname>Zend_Controller_Action_Helper_Cache</classname>, même si vous pouvez changer
        les options "page", "pagetag" (par exemple) en utilisant
        <methodname>Zend_Cache_Manager::setTemplateOptions()</methodname> ou même
        <methodname>Zend_Cache_Manager::setCacheTemplate()</methodname>.
    </para>
</sect1>
