<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect2 id="zend.application.core-functionality.resource-resourceabstract">
    <title>Zend_Application_Resource_ResourceAbstract</title>

    <para>
        <classname>Zend_Application_Resource_ResourceAbstract</classname> est une classe abstraite
        implementant <link
            linkend="zend.application.core-functionality.resource-resource">Zend_Application_Resource_Resource</link>,
        c'est un bon point de départ pour créer vos propres plugins de ressources.
    </para>

    <para>
        Note: Cette classe abstraite n'implémente pas la méthode <methodname>init()</methodname>;
        elle doit donc être implémentée par les extensions concrètes de cette classe.
    </para>

    <table id="zend.application.core-functionality.resource-resourceabstract.api">
        <title>Méthodes de Zend_Application_Resource_ResourceAbstract</title>
        <tgroup cols="4">
            <thead>
                <row>
                    <entry>Méthode</entry>
                    <entry>Valeur de retour</entry>
                    <entry>Paramètres</entry>
                    <entry>Description</entry>
                </row>
            </thead>
            <tbody>
                <row>
                    <entry><methodname>__construct($options = null)</methodname></entry>
                    <entry><type>Void</type></entry>
                    <entry><itemizedlist>
                        <listitem><para>
                            <varname>$options</varname>: <emphasis>optionnel</emphasis>.
                            Options de configuration de la ressource.
                        </para></listitem>
                    </itemizedlist></entry>
                    <entry><para>
                        Le constructeur doit accepter un paramètres permettant de définir l'état
                        de la ressource.
                    </para></entry>
                </row>

                <row>
                    <entry>
                        <methodname>setBootstrap(Zend_Application_Bootstrap_Bootstrapper
                            $bootstrap)</methodname>
                    </entry>
                    <entry><classname>Zend_Application_Resource_ResourceAbstract</classname></entry>
                    <entry><itemizedlist>
                            <listitem><para>
                                <varname>$bootstrap</varname>&#160;: <emphasis>requis</emphasis>.
                                Bootstrap parent initialisant cette resource.
                            </para></listitem>
                    </itemizedlist></entry>
                    <entry><para>
                        Doit accepter l'enregistrement du bootstrap parent.
                    </para></entry>
                </row>

                <row>
                    <entry><methodname>getBootstrap()</methodname></entry>
                    <entry><classname>Zend_Application_Bootstrap_Bootstrapper</classname></entry>
                    <entry>N/A</entry>
                    <entry><para>
                        Récupère l'objet bootstrap enregistré.
                    </para></entry>
                </row>

                <row>
                    <entry><methodname>setOptions(array $options)</methodname></entry>
                    <entry><classname>Zend_Application_Resource_ResourceAbstract</classname></entry>
                    <entry><itemizedlist>
                        <listitem><para>
                            <varname>$options</varname>&#160;: <emphasis>required</emphasis>.
                            Options de la ressource.
                        </para></listitem>
                    </itemizedlist></entry>
                    <entry><para>Définit l'état de la ressource.</para></entry>
                </row>

                <row>
                    <entry><methodname>getOptions()</methodname></entry>
                    <entry><type>Array</type></entry>
                    <entry>N/A</entry>
                    <entry><para>Retourne les options enregistrées.</para></entry>
                </row>
            </tbody>
        </tgroup>
    </table>

    <sect3 id="zend.application.core-functionality.resource-resourceabstract.names">
        <title>Noms des resources</title>

        <para>
            Lorsque vous enregistrez des plugins de ressources, il existe alors 3 manières d'y faire
            référence dans la classe du bootstrap parent, en fonction de la manière dont vous avez
            configuré le bootstrap.
        </para>

        <para>
            D'abord, si vos classes de plugins existent dans un chemin précis, vous pouvez alors y
            faire référence simplement par leur nom court -- la portion du nom de la classe située
            après le préfixe de classe. Par exemple, la classe
            "<classname>Zend_Application_Resource_View</classname>" peut être référencée simplement
            via "View" car le préfixe "<classname>Zend_Application_Resource</classname>"
            est déjà enregistré. Vous pouvez aussi utiliser le nom long de classe complet&#160;:
        </para>

        <programlisting language="php"><![CDATA[
$app = new Zend_Application(APPLICATION_ENV, array(
    'pluginPaths' => array(
        'My_Resource' => 'My/Resource/',
    ),
    'resources' => array(
        // Si la classe suivante existe:
        'My_Resource_View' => array(),

        // alors ceci est équivalent:
        'View' => array(),
    ),
));
]]></programlisting>

        <para>
            Quoiqu'il en soit, vous pouvez lancer (bootstrap) la ressource ou la récupérer via son
            nom court:
        </para>

        <programlisting language="php"><![CDATA[
$bootstrap->bootstrap('view');
$view = $bootstrap->getResource('view');
]]></programlisting>

        <para>
            Ensuite, si aucun chemin précis n'est enregistré, il reste possible de passer ses
            plugins de ressources via leur nom de classe complet&#160;:
        </para>

        <programlisting language="php"><![CDATA[
$app = new Zend_Application(APPLICATION_ENV, array(
    'resources' => array(
        // Ceci va charger le plugin de ressource standard 'View':
        'View' => array(),

        // Alors que ceci charge une classe spécifiquement via son nom:
        'My_Resource_View' => array(),
    ),
));
]]></programlisting>

        <para>
            La récupération de ces objets se fait alors de manière plus clarifiée&#160;:
        </para>

        <programlisting language="php"><![CDATA[
$bootstrap->bootstrap('My_Resource_View');
$view = $bootstrap->getResource('My_Resource_View');
]]></programlisting>

        <para>
            La troisième méthode découle des deux précédentes. Il est possible de donner un nom
            court à n'importe quelle classe. Ajoutez une variable publique
            <varname>$_explicitType</varname> dans la classe du plugin, sa valeur sera alors
            utilisée comme nom court pour référencer le plugin dans le bootstrap. Définissons
            par exemple notre propre vue&#160;:
        </para>

        <programlisting language="php"><![CDATA[
class My_Resource_View extends Zend_Application_Resource_ResourceAbstract
{
    public $_explicitType = 'My_View';

    public function init()
    {
        // du code ici...
    }
}
]]></programlisting>

        <para>
            Nous pouvons dès lors lancer cette ressource (bootstrap) ou la récupérer via le nom
            "<classname>My_View</classname>":
        </para>

        <programlisting language="php"><![CDATA[
$bootstrap->bootstrap('My_View');
$view = $bootstrap->getResource('My_View');
]]></programlisting>

        <para>
            Grâce à ses différentes manières de faire, vous pouvez redéfinir des plugins existants,
            en ajouter ou encore les mixer pour accomplir des tâches d'initialisation complexes.
        </para>
    </sect3>
</sect2>
