<?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> ist eine abstrakte Klasse
        die <link
            linkend="zend.application.core-functionality.resource-resource">Zend_Application_Resource_Resource</link>
        implementiert, und ist ein guter Startpunkt für die Erstellung eigener Plugin Ressourcen.
    </para>

    <para>
        Beachte: Diese abstrakte Klasse implementiert die <methodname>init()</methodname> Methode
        nicht; das wird der Definition in einer konkreten Erweiterung dieser Klasse vorbehalten.
    </para>

    <table id="zend.application.core-functionality.resource-resourceabstract.api">
        <title>Zend_Application_Resource_ResourceAbstract Methods</title>

        <tgroup cols="4">
            <thead>
                <row>
                    <entry>Methode</entry>
                    <entry>Rückgabewert</entry>
                    <entry>Parameter</entry>
                    <entry>Beschreibung</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>optional</emphasis>.
                                    Optionen mit denen der Ressource Status gesetzt wird.
                                </para>
                            </listitem>
                        </itemizedlist>
                    </entry>

                    <entry>
                        <para>
                            Der Konstruktor sollte die Übergabe von Optionen erlauben mit denen der
                            Status initialisiert wird.
                        </para>
                    </entry>
                </row>

                <row>
                    <entry>
                        <methodname>setBootstrap(Zend_Application_Bootstrap_Bootstrapper
                            $bootstrap)</methodname>
                    </entry>

                    <entry><classname>Zend_Application_Resource_Resource</classname></entry>

                    <entry>
                        <itemizedlist>
                            <listitem>
                                <para>
                                    <varname>$bootstrap</varname>: <emphasis>required</emphasis>.
                                    Parent Bootstrap der diese Ressource initialisiert.
                                </para>
                            </listitem>
                        </itemizedlist>
                    </entry>

                    <entry>
                        <para>Sollte es erlauben das Parent Bootstrap Objekt zu registrieren.</para>
                    </entry>
                </row>

                <row>
                    <entry><methodname>getBootstrap()</methodname></entry>
                    <entry><classname>Zend_Application_Bootstrap_Bootstrapper</classname></entry>
                    <entry>N/A</entry>
                    <entry><para>Empfange die registrierte Bootstrap Instanz.</para></entry>
                </row>

                <row>
                    <entry><methodname>setOptions(array $options)</methodname></entry>
                    <entry><classname>Zend_Application_Resource_Resource</classname></entry>

                    <entry>
                        <itemizedlist>
                            <listitem>
                                <para>
                                    <varname>$options</varname>: <emphasis>required</emphasis>.
                                    Optionen mit denen der Status gesetzt werden soll.
                                </para>
                            </listitem>
                        </itemizedlist>
                    </entry>

                    <entry><para>Set resource state.</para></entry>
                </row>

                <row>
                    <entry><methodname>getOptions()</methodname></entry>
                    <entry><type>Array</type></entry>
                    <entry>N/A</entry>
                    <entry><para>Empfangen der registrierten Optionen.</para></entry>
                </row>
            </tbody>
        </tgroup>
    </table>

    <sect3 id="zend.application.core-functionality.resource-resourceabstract.names">
        <title>Ressourcen Namen</title>

        <para>
            Wenn man Ressourcen Plugins registriert, besteht ein Problem das hierdurch entsteht
            darin, wie man von der Eltern-Bootstrap Klasse auf diese verweist. Es gibt drei
            verschiedene Mechanismen die verwendet werden können, abhängig davon wie die
            Bootstrap und deren Plugin Ressourcen konfiguriert wurden.
        </para>

        <para>
            Erstens kann man, wenn die Plugins mit einem definierten Präfix Pfad definiert wurden,
            einfach mit Ihrem "Kurz-Namen" auf die verweisen -- z.B. der Teil des Klassennamens
            der dem Klassen Präfix folgt. Als Beispiel kann auf die Klasse
            "<classname>Zend_Application_Resource_View</classname>" einfach mit "View" verweist
            werden, da der Präfix Pfad "<classname>Zend_Application_Resource</classname>" bereits
            registriert ist. Man kann Sie registrieren, indem der komplette Klassenname oder der
            Kurzname verwendet wird:
        </para>

        <programlisting language="php"><![CDATA[
$app = new Zend_Application(APPLICATION_ENV, array(
    'pluginPaths' => array(
        'My_Resource' => 'My/Resource/',
    ),
    'resources' => array(
        // Wenn die folgende Klasse existiert:
        'My_Resource_View' => array(),

        // Dann ist das gleichwertig:
        'View' => array(),
    ),
));
]]></programlisting>

        <para>
            In jedem Fall kann man die Ressource bootstrappen und Sie später erhalten indem der
            Kurzname verwendet wird:
        </para>

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

        <para>
            Zweitens kann man, wenn kein passender Plugin Pfad definiert ist, trotzdem eine
            Ressource durch den kompletten Klassennamen übergeben. In diesem Fall kann man auf
            Sie verweisen indem der komplette Klassenname der Ressource verwendet wird:
        </para>

        <programlisting language="php"><![CDATA[
$app = new Zend_Application(APPLICATION_ENV, array(
    'resources' => array(
        // Das lädt die standardmäßige 'View' Ressource:
        'View' => array(),

        // Wärend das eine Ressource mit einem speziellen Klassennamen lädt:
        'My_Resource_View' => array(),
    ),
));
]]></programlisting>

        <para>
            Offensichtlich mach das eine Referenz auf die Ressource viel einfacher:
        </para>

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

        <para>
            Das bringt uns zur dritten Option. Man kann einen expliziten Namen spezifizieren, zu
            dem eine Ressourceklasse sich registriert. Das kann durch das Hinzufügen einer public
            <varname>$_explicitType</varname> Eigenschaft, mit einem Stringwert, in der Plugin
            Ressourceklasse durchgeführt werden; dieser Wert wird dann immer verwendet wenn man
            zur Plugin Ressource über die Bootstrap verweisen will. Als Beispiel, definieren wir
            unsere eigene View Klasse:
        </para>

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

    public function init()
    {
        // Initialisierungen durchführen...
    }
}
]]></programlisting>

        <para>
            Wir können dann die Ressource bootstrappen, oder Sie durch den Namen
            "<classname>My_View</classname>" erhalten:
        </para>

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

        <para>
            Durch Verwendung der verschiedenen Wege der Benennung kann man bestehende Ressourcen
            überschreiben, eigene hinzufügen, verschiedene Ressourcen mischen um komplexe
            Initialisierungen durchzuführen, und mehr.
        </para>
    </sect3>
</sect2>
