<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.tool.framework.extending">
    <title>Extending and Configuring Zend_Tool_Framework</title>

    <sect2 id="zend.tool.framework.console-client">
        <title>Anpassen des Zend_Tool Konsolen Clients</title>

        <para>
            Mit Zend Framework 1.9 erlaubt es <classname>Zend_Tool_Framework</classname> Entwicklern
            Informationen zu Speichern, Provider spezifische Konfigurationswerte, und eigene Dateien
            an einem speziellen Ort auf der Entwicklermaschine. Diese Konfigurationswerte und
            Dateien können von Providern verwendet werden um Funktionalität zu erweitern, sie
            anzupassen, oder aus einem anderen Grund welcher dem Provider passt.
        </para>

        <para>
            Der primäre Zwecke, und der warscheinlich wichtigste der von existierenden Providern
            verwendet wird, besteht darin es Entwicklern zu erlauben den Weg wie die
            "out of the box" Provider funktionieren zu verändern.
        </para>

        <para>
            Eines der üblichsten angefragten Features ist es, in der Lage zu sein
            <classname>Zend_Tool_Project</classname>'s Projekt Provider eigene Projekt Profile
            anzubieten. Das würde es Entwicklern erlauben ein eigenes Profil an einem speziellen
            Platz zu speichern, der wiederholt vom <classname>Zend_Tool</classname> System verwendet
            werden kann um eigene Profile zu erstellen. Ein anderes üblicherweise angefragtes
            Feature ist es in der Lage zu sein das Verhalten von Providern mit
            Konfigurationseinstellungen zu verändern. Um das zu tun benötigen wir nicht nur eine
            <classname>Zend_Tool</classname> Konfigurationsdatei, sondern auch einen Ort an dem wir
            diese Konfigurationsdatei finden können.
        </para>

        <sect3 id="zend.tool.framework.console-client.home-directory">
            <title>Das Home Verzeichnis</title>

            <para>
                Bevor der Konsolen Client beginnen kann nach einer <classname>Zend_Tool</classname>
                Konfigurationsdatei zu suchen, oder einem lokalen Speicherverzeichnis, muß er
                zuerst in der Lage sein zu erkennen wo das "Home Verzeichnis" liegt.
            </para>

            <para>
                Auf *nix basierten Maschinen, wird <acronym>PHP</acronym> mit einer
                Umgebungsvariable die <constant>HOME</constant> heißt, und dem Pfad zum Home
                Verzeichnis des aktuellen Benutzers, bekannt gegeben. Typischerweise ist dieser
                Pfad ähnlich wie <filename>/home/myusername</filename>.
            </para>

            <para>
                Auf Windows basierten Maschinen, wird <acronym>PHP</acronym> typischerweise mit
                einer Umgebungsvariable die <constant>HOMEPATH</constant> heißt, und dem Pfad zum
                Home Verzeichnis des aktuellen Benutzers, bekannt gegeben. Das Verzeichnis kann
                normalerweise, entweder unter
                <filename>C:\Documents and Settings\Username\</filename>, oder bei Vista unter
                <filename>C:\Users\Username</filename> gefunden werden.
            </para>

            <para>
                Wenn entweder das Home Verzeichnis nicht gefunden werden kann, oder man den Ort an
                dem der <classname>Zend_Tool_Framework</classname> Konsolen Client das Home
                Verzeichnis findet, ändern will kann man eine Umgebungsvariable die
                <constant>ZF_HOME</constant> heißt angeben um zu spezifizieren wo das Home
                Verzeichnis gefunden werden kann.
            </para>
        </sect3>

        <sect3 id="zend.tool.framework.console-client.local-storage">
            <title>Lokaler Speicher</title>

            <para>
                Sobald das Home Verzeichnis gefunden werden kann, kann
                <classname>Zend_Tool_Framework</classname>'s Konsolen Client entweder das lokale
                Speicher Verzeichnis automatisch erkennen, oder es kann Ihm mitgeteilt werden wo
                das lokale Speicherverzeichnis erwartet wird.
            </para>

            <para>
                Angenommen das Home Verzeichnis wurde gefunden (hier als <varname>$HOME</varname>
                bezeichnet), dann wird der Konsolen client nach dem lokalen Speicherverzeichnis
                unter <filename>$HOME/.zf/</filename> nachsehen. Wenn es gefunden wird, dann wird
                das lokale Speicherverzeichnis auf diesen Ort gesetzt.
            </para>

            <para>
                Wenn das Verzeichnis nicht gefunden werden kann, oder der Entwickler den Ort
                überschreiben will, kann man das durch Setzen einer Umgebungsvariable durchführen.
                Unabhängig davon ob <varname>$HOME</varname> vorher gesetzt wurde, kann der
                Entwickler die Umgebungsvariable <constant>ZF_STORAGE_DIR</constant> anbieten.
            </para>

            <para>
                Sobald der Pfad zu einem lokalen Speicherverzeichnis gefunden wurde,
                <emphasis>muss</emphasis> das Verzeichnis existieren damit es an die
                <classname>Zend_Tool_Framework</classname> Runtime übergeben werden kann, da dieses
                für Sie nicht erstellt wird.
            </para>
        </sect3>

        <sect3 id="zend.tool.framework.console-client.configuration-file">
            <title>Benutzer Konfiguration</title>

            <para>
                Wie beim lokalen Speicher kann <classname>Zend_Tool_Framework</classname>'s
                Konsolen Client, sobald ein Home Verzeichnis gefunden wurde, entweder versuchen den
                Pfad zu einer Konfigurationsdatei autoamtisch zu erkennen, oder es kann Ihm ganz
                spezifisch gesagt werden wo die Konfigurationsdatei gefunden werden kann.
            </para>

            <para>
                Angenommen das Home Verzeichnis wurde gefunden (hier als <varname>$HOME</varname>
                bezeichnet), dann wird der Konsolen Client versuchen nach der Existenz einer
                Konfigurationsdatei zu sehen die in <filename>$HOME/.zf.ini</filename> liegt.
                Diese Datei wird, wenn Sie gefunden wurde, als Konfigurationsdatei für
                <classname>Zend_Tool_Framework</classname> verwendet.
            </para>

            <para>
                Wenn der Ort nicht existiert, aber das lokale Speicherverzeichnis, dann wird der
                Konsolen Client versuchen die Konfigurationsdatei im lokalen Speicherverzeichnis zu
                finden. Angenommen das lokale Speicherverzeichnis existiert in
                <varname>$LOCAL_STORAGE</varname>, und eine Datei existiert als
                <filename>$LOCAL_STORAGE/zf.ini</filename>, dann wird diese vom Konsolen Client
                gefunden und als <classname>Zend_Tool_Framework</classname> Konfigurationsdatei
                verwendet.
            </para>

            <para>
                Wenn die Datei nicht automatisch erkannt werden kann, oder der Entwickler den Ort
                der Konfigurationsdatei spezifizieren will, kann er das durch Setzen einer
                Umgebungsvariable tun. Wenn die Umgebungsvariable
                <constant>ZF_CONFIG_FILE</constant> gesetzt ist, dann wird dieser Wert als Ort der
                Konfigurationsdatei verwendet die mit dem Konsolen Client zu verwenden ist.
                <constant>ZF_CONFIG_FILE</constant> kann auf irgendeine <acronym>INI</acronym>,
                <acronym>XML</acronym> oder <acronym>PHP</acronym> Datei zeigen die
                <classname>Zend_Config</classname> lesen kann.
            </para>

            <para>
                Wenn die Datei weder an der automatisch erkannten, noch an der angegebenen Position
                existiert, dann wird Sie nicht verwendet da
                <classname>Zend_Tool_Framework</classname> nicht versucht diese Datei automatisch
                zu erstellen.
            </para>
        </sect3>

        <sect3 id="zend.tool.framework.console-client.configuration-content">
            <title>Inhalt der Benutzer Konfigurationsdatei</title>

            <para>
                Die Konfigurationdatei sollte als <classname>Zend_Config</classname>
                Konfigurationdatei, im <acronym>INI</acronym> format, strukturiert sein und ohne
                zusätzliche definierte Sektionen. Schlüssel des ersten Levels sollten vom Provider
                verwendet werden um nach einem speziellen Wert zu suchen. Wenn der "Project"
                Provider zum Beispiel ein "profiles" Verzeichnis erwartet, dann sollte
                typischerweise darunter verstanden werden das er im folgenden Schlüssel Wertpaar
                gesucht wird:
            </para>

            <programlisting language="php"><![CDATA[
project.profile = irgendein/pfad/zu/irgendeinem-verzeichnis
]]></programlisting>

            <para>
                Der einzige reservierte <acronym>INI</acronym> Präfix ist der Wert "php". Der "php"
                Präfix für Werte ist reserviert um Namen und Werte, von während der Laufzeit
                setzbaren <acronym>PHP</acronym> Werte, zu setzen, wie
                <property>include_path</property> oder <property>error_reporting</property>. Um
                <property>include_path</property> oder <property>error_reporting</property> mit
                einem <acronym>INI</acronym> Wert zu überschreiben, würde ein Entwickler folgendes
                setzen:
            </para>

            <programlisting language="php"><![CDATA[
php.include_path = "/path/to/includes1:/path/to/includes2"
php.error_reporting = 1
]]></programlisting>

            <important>
                <para>
                    Der reservierte Prefix "php" funktioniert nur mit <acronym>INI</acronym>
                    Dateien. Man kann <acronym>PHP</acronym> <acronym>INI</acronym> Werte nicht in
                    <acronym>PHP</acronym> oder <acronym>XML</acronym> Konfigurationen setzen.
                </para>
            </important>
        </sect3>
    </sect2>
</sect1>
