<?xml version="1.0" encoding="UTF-8"?>
<!-- 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 abstaite
        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>: <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>: <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>
            Lorque 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éja enregistré. Vous pouvez aussi utiliser le nom long de classe complet:
        </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:
        </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:
        </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:
        </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>
