<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 22745 -->
<!-- Reviewed: 22745 -->
<sect1 id="zend.tool.usage.cli">
    <title>Verwendung von Zend_Tool auf der Kommandozeile</title>

    <para>
        Das <acronym>CLI</acronym>, oder Kommandozeilentool (intern bekannt als Konsolen Tool),
        ist aktuell das primäre Interface für die Bearbeitung von <classname>Zend_Tool</classname>
        Anfragen. Mit dem <acronym>CLI</acronym> Tool können Entwickler Tooling Anfragen im
        "Kommandozeilen Fenster", auch bekannt als "Terminal" Fenster, auslösen. Diese Umgebung ist
        vorherrschend bei *nix Umgebungen, es gibt aber auch übliche Implementationen unter Windows
        mit <filename>cmd.exe</filename>, Console2 und auch im Cygwin Projekt.
    </para>

    <!--
    <sect2 id="zend.tool.usage.cli.introduction">
        <title>Einführung</title>
    </sect2>
    -->

    <sect2 id="zend.tool.usage.cli.installation">
        <title>Installation</title>

        <sect3 id="zend.tool.usage.cli.installation.download-and-go">
            <title>Herunterladen und anfangen</title>

            <para>
                Zuerst muss Zend Framework heruntergeladen werden. Dazu geht man auf die
                Seite framework.zend.com und lädt das letzte Release herunter. Nachdem man das
                Paket heruntergeladen und auf dem System plaziert hat, ist der nächste Schritt das
                zf Kommendo auf dem System zu erstellen. Der einfachste Weg dafür ist, die
                richtigen Dateien vom bin/ Verzeichnis des Downloads zu kopieren, und diese Dateien
                im <emphasis>gleichen</emphasis> Verzeichnis zu platzieren wie die
                PHP CLI Binardatei.
            </para>
        </sect3>

        <sect3 id="zend.tool.usage.cli.installation.pear">
            <title>Installation über Pear</title>

            <para>
                Um es über PEAR zu installieren, muss man die 3rd Party Site zfcampus.org verwenden
                um das letzte Zend Framework PEAR Paket zu installieren. Diese Pakete werden
                typischerweise innerhalb eines Tages nach einem offiziellen Zend Framework Release
                erstellt. Der Vorteil der Installation über den PEAR Package Manager ist, dass die
                ZF Bibliothek im include_path landet, und die zf.php und ZF Skripte an einem Ort im
                eigenen System landen, der es erlaubt sie ohne zusätzliches Setup zu starten.
            </para>

            <programlisting language="text"><![CDATA[
pear channel-discover pear.zfcampus.org
pear install zfcampus/zf
]]></programlisting>

            <para>
                Das ist es schon. Nach dem initialen Setup sollte man in der Lage sein, weiter zu
                machen indem das zf Kommando ausgeführt wird. Ein guter Weg um zu prüfen, ob es
                vorhanden ist, ist es zf --help auszuführen.
            </para>
        </sect3>

        <sect3 id="zend.tool.usage.cli.installation.install-by-hand">
            <title>Installation von Hand</title>

            <para>
                Die Installtion von Hand zeigt das Verfahren, wie zf.php und die Zend Framework
                Bibliothek dazu gebracht werden zusammen zu arbeiten, wenn diese nicht an konventionellen
                Orten abgelegt wurden, oder zumindest, an einem Ort an dem das eigene System diese
                nicht einfach ausführen kann (was normalerweise für Programme im eigenen System Pfad gilt).
            </para>

            <para>
                Wenn man auf einem *nix oder Mac System ist, kann man auch einen Link von irgendwo
                im eigenen Pfad zur zf.sh Datei erstellen. Dabei muss man sich keine
                Gedanken darüber machen, ob die Zend Framework Bibliothek im eigenen include_path
                ist, da die Dateien zf.php und zf.sh auf die Bibliothek zugreifen können, relativ zu deren
                Standort, (was bedeutet das die ./bin/ Dateien relativ zu ../library/ der
                Zend Framework Bibliothek sind).
            </para>

            <para>
                Es gibt eine Anzahl von anderen vorhandenen Optionen für das Setup von zf.php und
                der Bibliothek im eigenen System. Diese Optionen drehen sich um das Setzen von
                speziellen Umgebungsvariablen. Diese werden im späteren Kapitel "Die CLI Umgebung
                anpassen" beschrieben. Die Umgebungsvariablen für das Setzen von include_path,
                ZF_INCLUDE_PATH und ZF_INCLUDE_PATH_PREPEND für zf.php sind die interessantesten.
            </para>
        </sect3>
    </sect2>

    <sect2 id="zend.tool.usage.cli.general-purpose-commands">
        <title>Kommandos für allgemeine Zwecke</title>

        <sect3 id="zend.tool.usage.cli.general-purpose-commands.version">
            <title>Version</title>

            <para>
                Das zeigt die aktuelle Versionsnummer der Kopie des Zend Framework, welche das zf.php
                Tool verwendet.
            </para>

            <programlisting language="text"><![CDATA[
zf show version
]]></programlisting>
        </sect3>

        <sect3 id="zend.tool.usage.cli.general-purpose-commands.built-in-help">
            <title>Eingebaute Hilfe</title>

            <para>
                Das eingebaute Hilfesystem ist der erste Ort an dem man aktuelle Informationen
                darüber erhält, was das eigene System in der Lage ist zu tun. Das Hilfesystem ist
                dahingehend dynamisch, dass Provider dem eigenen System hinzugefügt und
                automatisch ausgeführt werden, und von daher werden die für die Ausführung
                notwendigen Parameter im Hilfebildschirm vorhanden. Der einfachste Weg um
                den Hilfebildschirm zu erhalten, ist der folgende:
            </para>

            <programlisting language="text"><![CDATA[
zf --help
]]></programlisting>

            <para>
                Das gibt einen Überblick über die verschiedenen Möglichkeiten des Systems. Manchmal
                gibt es komplexere Kommandos, die ausgeführt werden können, und um mehr
                Informationen über sie zu erhalten, muss man einen spezielles Hilfebefehl
                ausführen. Für die spezialisierte Hilfe muss einfach eines der Elemente des
                Kommandos mit einem "?" ersetzt werden. Das sagt dem Hilfesystem, dass man mehr
                Informationen darüber will, welche Kommandos an Stelle des Fragezeichens stehen
                können. Zum Beispiel:
            </para>

            <programlisting language="text"><![CDATA[
zf ? controller
]]></programlisting>

            <para>
                Das obige bedeutet "zeig mir alle 'Aktionen' für den Provider 'controller'"; während
                das folgende:
            </para>

            <programlisting language="text"><![CDATA[
zf show ?
]]></programlisting>

            <para>
                bedeutet "zeig mit alle Provider welche die 'show' Aktion unterstützen. Das funktioniert
                auch, wenn man es für Optionen anwendet, wie man im folgenden Beispiel sehen kann:
            </para>

            <programlisting language="text"><![CDATA[
zf show version.? (zeige alle Spezialitäten)
zf show version ? (zeige alle Optionen)
]]></programlisting>
        </sect3>

        <sect3 id="zend.tool.usage.cli.general-purpose-commands.manifest">
            <title>Manifest</title>

            <para>
                Das zeigt welche Informationen im Tooling System Manifest sind. Das ist wichtiger
                für Entwickler von Providers als für normale Benutzer des Tooling Systems.
            </para>

            <programlisting language="text"><![CDATA[
zf show manifest
]]></programlisting>
        </sect3>

        <!--
        <sect3 id="zend.tool.usage.cli.general-purpose-commands.tool-configuration">
            <title>Tool Konfiguration</title>

            <para>Platzhalter, benötigt Handbuch von @beberli</para>
        </sect3>
        -->
    </sect2>

    <sect2 id="zend.tool.usage.cli.project-specific-commands">
        <title>Projektspezifische Kommandos</title>

        <sect3 id="zend.tool.usage.cli.project-specific-commands.project">
            <title>Project</title>

            <para>
                Der Projekt-Provider ist das erste Kommando, das man ausführen könnte. Er
                erstellt die grundsätzliche Struktur der Anwendung. Er wird benötigt, bevor irgendein
                anderer Provider ausgeführt werden kann.
            </para>

            <programlisting language="text"><![CDATA[
zf create project MyProjectName
]]></programlisting>

            <para>
                Dies erstellt ein Projekt im ./MyProjectName genannten Verzeichnis. Von diesem Punkt
                an, ist es wichtig anzumerken, dass jedes weitere Kommando in der Kommandozeile von
                innerhalb des Projektverzeichnisses auszuführen ist, welches gerade erstellt wurde.
                Nach dessen Erstellung ist es also notwendig, dass man in das Verzeichnis wechselt.
            </para>
        </sect3>

        <sect3 id="zend.tool.usage.cli.project-specific-commands.module">
            <title>Module</title>

            <para>
                Der Module Provider erlaubt die einfache Erstellung eines Zend Framework Moduls. Ein
                Modul folgt lose dem MVC Pattern. Wenn Module erstellt werden, verwenden sie die
                gleiche Struktur, welche im application/ Level verwendet wird, und dupliziert diese
                im ausgewählten Namen für das Modul, innerhalb des Verzeichnisses "modules" im
                Verzeichnis application/ ohne dass das Modul Verzeichnis selbst dupliziert wird.
                Zum Beispiel:
            </para>

            <programlisting language="text"><![CDATA[
zf create module Blog
]]></programlisting>

            <para>
                Das erstellt ein Modul welches Blog genannt wird unter application/modules/Blog, und
                alle Abschnitte welche das Modul benötigt.
            </para>
        </sect3>

        <sect3 id="zend.tool.usage.cli.project-specific-commands.controller">
            <title>Controller</title>

            <para>
                Der Controller Provider ist (meistens) für die Erstellung leerer Controller
                zuständig sowie deren entsprechenden Verzeichnissen und Dateien für View Skripte.
                Um ihn zum Beispiel dazu zu verwenden, einen 'Auth' Controller zu erstellen, muss
                folgendes ausgeführt werden:
            </para>

            <programlisting language="text"><![CDATA[
zf create controller Auth
]]></programlisting>

            <para>
                Das erstellt einen Controller der Auth heißt, und im speziellen wird eine Datei
                unter application/controllers/AuthController.php erstellt, welche den AuthController
                enthält. Wenn man einen Controller für ein Modul erstellen will, kann eine der
                folgenden Zeilen verwendet werden:
            </para>

            <programlisting language="text"><![CDATA[
zf create controller Post 1 Blog
zf create controller Post -m Blog
zf create controller Post --module=Blog
]]></programlisting>

            <para>
                Beachte: Im ersten Kommando ist der Wert 1 für das "includeIndexAction" Flag.
            </para>
        </sect3>

        <sect3 id="zend.tool.usage.cli.project-specific-commands.action">
            <title>Action</title>

            <para>
                Um eine Action in einem bestehenden Controller zu erstellen:
            </para>

            <programlisting language="text"><![CDATA[
zf create action login Auth
zf create action login -c Auth
zf create action login --controller-name=Auth
]]></programlisting>
        </sect3>

        <sect3 id="zend.tool.usage.cli.project-specific-commands.view">
            <title>View</title>

            <para>
                Um eine View ausserhalb der normalen Controller/Action Erstellung zu erstellen
                würde man eine der folgenden Zeilen verwenden:
            </para>

            <programlisting language="text"><![CDATA[
zf create view Auth my-script-name
zf create view -c Auth -a my-script-name
]]></programlisting>

            <para>
                Das erstellt ein View Skript im Controller Verzeichnis von Auth.
            </para>
        </sect3>

        <sect3 id="zend.tool.usage.cli.project-specific-commands.model">
            <title>Model</title>

            <para>
                Der Model Provider ist nur für die Erstellung der richtigen Modell Dateien, mit dem
                richtigen Namen im Anwendungsverzeichnis zuständig. Zum Beispiel:
            </para>

            <programlisting language="text"><![CDATA[
zf create model User
]]></programlisting>

            <para>
                Wenn man ein Modell mit einem spezifischen Modul erstellen will:
            </para>

            <programlisting language="text"><![CDATA[
zf create model Post -m Blog
]]></programlisting>

            <para>
                Das obige erstellt ein 'Post' Modell im Modul 'Blog'.
            </para>
        </sect3>

        <sect3 id="zend.tool.usage.cli.project-specific-commands.form">
            <title>Form</title>

            <para>
                Der Form Provider ist nur für die Erstellung der richtigen Formulardateien und der
                init() Methode, mit dem richtigen Namen im Anwendungsverzeichnis zuständig. Zum
                Beispiel:
            </para>

            <programlisting language="text"><![CDATA[
zf create form Auth
]]></programlisting>

            <para>
                Wenn man ein Modell in einem spezifischen Modul erstellen will:
            </para>

            <programlisting language="text"><![CDATA[
zf create form Comment -m Blog
]]></programlisting>

            <para>
                Das obige erstellt ein 'Comment' Formular im Modul 'Blog'.
            </para>
        </sect3>

        <sect3 id="zend.tool.usage.cli.project-specific-commands.database-adapter">
            <title>DbAdapter</title>

            <para>
                Um einen DbAdapter zu konfigurieren muss man die Informationen als Url kodierten
                String angeben. Dieser String muss in der Kommandozeile in Hochkommas stehen.
            </para>

            <para>
                Um zum Beispiel die folgenden Informationen einzugeben:

                <itemizedlist>
                    <listitem><para>adapter: Pdo_Mysql</para></listitem>
                    <listitem><para>username: test</para></listitem>
                    <listitem><para>password: test</para></listitem>
                    <listitem><para>dbname: test </para></listitem>
                </itemizedlist>

                Muss das folgende auf der Kommandozeile ausgeführt werden:
            </para>

            <programlisting language="text"><![CDATA[
zf configure dbadapter "adapter=Pdo_Mysql&username=test&password=test&dbname=test"
]]></programlisting>

            <para>
                Dies nimmt an das man diese Information im Abschnitt 'production' der
                Konfigurationsdatei der Anwendung speichern will. Das folgende demonstriert eine
                Sqlite Konfiguration im Abschnitt 'development' der Konfigurationsdatei der
                Anwendung:
            </para>

            <programlisting language="text"><![CDATA[
zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/test.db" development
zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/test.db" -s development
]]></programlisting>
        </sect3>

        <sect3 id="zend.tool.usage.cli.project-specific-commands.db-table">
            <title>DbTable</title>

            <para>
                Der DbTable Provider ist für die Erstellung der <classname>Zend_Db_Table</classname>
                Modell/Datenzugriffs-Dateien, der Anwendung die sie benötigt, verantwortlich.
                Zusammen mit dem richtigen Klassennamen und dem richtigen Platz in der Anwendung.
                Die zwei wichtigsten Informationsteile sind <emphasis>DbTable Name</emphasis> und
                der <emphasis>aktuelle Name der Datenbank Tabelle</emphasis>. Zum Beispiel:
            </para>

            <programlisting language="text"><![CDATA[
zf create dbtable User user
zf create dbtable User -a user

// akzeptiert auch eine "erzwinge" Option
// um existierende Dateien zu überschreiben
zf create dbtable User user -f
zf create dbtable User user --force-override
]]></programlisting>

            <para>
                Der DbTable Provider ist auch dazu in der Lage die richtigen Daten zu erstellen
                indem er die Datenbank scannt, die mit dem obigen DbAdapter Provider konfiguriert
                wurde.
            </para>

            <programlisting language="text"><![CDATA[
zf create dbtable.from-database
]]></programlisting>

            <para>
                Wenn das obenstehende ausgeführt wird, könnte es Sinn machen das Vortäuschen-Flag
                ("-p") zuerst zu verwenden, damit man sieht, was getan werden würde und welche
                Tabellen in der Datenbank gefunden werden können.
            </para>

            <programlisting language="text"><![CDATA[
zf -p create dbtable.from-database
]]></programlisting>
        </sect3>

        <sect3 id="zend.tool.usage.cli.project-specific-commands.layout">
            <title>Layout</title>

            <para>
                Aktuell ist die einzige unterstützte Aktion für Layouts einfach deren Aktivierung,
                damit die richtigen Schlüssel in die Datei application.ini geschrieben werden
                damit die Anwendungs Ressource funktioniert und die richtigen Verzeichnisse und die
                Datei layout.phtml erstellt wird.
            </para>

            <programlisting language="text"><![CDATA[
zf enable layout
]]></programlisting>
        </sect3>
    </sect2>

    <sect2 id="zend.tool.usage.cli.environment-customization">
        <title>Anpassung der Umgebung</title>

        <sect3 id="zend.tool.usage.cli.environment-customization.storage-directory">
            <title>Das Speicherverzeichnis</title>

            <para>
                Das Speicherverzeichnis ist wichtig, damit Provider einen Platz haben, an dem sie die
                Benutzer-definierte Logik finden, welche die Art verändern könnte, wie sie sich
                verhalten. Ein Beispiel welches unten angegeben ist, bewirkt die Platzierung einer
                eigenen Projekt Profil Datei.
            </para>

            <programlisting language="text"><![CDATA[
zf --setup storage-directory
]]></programlisting>
        </sect3>

        <sect3 id="zend.tool.usage.cli.environment-customization.configuration-file">
            <title>Die Konfigurationsdatei</title>

            <para>
                Das erstellt die richtige zf.ini Datei. Dies <emphasis>sollte</emphasis> nach
                <command>zf --setup storage-directory</command> ausgeführt werden. Wenn dem nicht so
                ist, wird sie im Home-Verzeichnis des Benutzers platziert. Aber wenn dem so ist,
                dann wird sie im benutzerdefinierten Speicherverzeichnis platziert.
            </para>

            <programlisting language="text"><![CDATA[
zf --setup config-file
]]></programlisting>
        </sect3>

        <sect3 id="zend.tool.usage.cli.environment-customization.environment-locations">
            <title>Orte der Umgebung</title>

            <para>
                Diese sollten gesetzt werden, wenn man die standardmäßigen Orte überschreiben will, an
                denen ZF versucht seine Werte zu lesen.
            </para>

            <itemizedlist>
                <listitem>
                    <para>ZF_HOME</para>

                    <itemizedlist>
                        <listitem>
                            <para>
                                Das Verzeichnis, in dem dieses Tool nach dem Home-Verzeichnis
                                nachsieht
                            </para>
                        </listitem>

                        <listitem><para>Das Verzeichnis muss existieren</para></listitem>

                        <listitem>
                            <para>Suchrichtung:</para>

                            <itemizedlist>
                                <listitem><para>ZF_HOME Umgebungsvariable</para></listitem>
                                <listitem><para>HOME Umgebungsvariable</para></listitem>
                                <listitem><para>dann HOMEPATH Umgebungsvariable</para></listitem>
                            </itemizedlist>
                        </listitem>
                    </itemizedlist>
                </listitem>

                <listitem>
                    <para>ZF_STORAGE_DIRECTORY</para>

                    <itemizedlist>
                        <listitem>
                            <para>
                                Wo dieses Tool nach dem Speicherverzeichnis nachsehen wird
                            </para>
                        </listitem>

                        <listitem><para>Das Verzeichnis muss existieren</para></listitem>

                        <listitem>
                            <para>Suchrichtung:</para>

                            <itemizedlist>
                                <listitem>
                                    <para>ZF_STORAGE_DIRECTORY Umgebungsvariable</para>
                                </listitem>

                                <listitem><para>$homeDirectory/.zf/ Verzeichnis</para></listitem>
                            </itemizedlist>
                        </listitem>
                    </itemizedlist>
                </listitem>

                <listitem>
                    <para>ZF_CONFIG_FILE</para>

                    <itemizedlist>
                        <listitem>
                            <para>Wo dieses Tool nach der Konfigurationsdatei nachsieht</para>
                        </listitem>

                        <listitem>
                            <para>Suchrichtung:</para>

                            <itemizedlist>
                                <listitem><para>ZF_CONFIG_FILE Umgebungsvariable</para></listitem>

                                <listitem>
                                    <para>$homeDirectory/.zf.ini Datei wenn sie existiert</para>
                                </listitem>

                                <listitem>
                                    <para>$storageDirectory/zf.ini Datei wenn sie existiert</para>
                                </listitem>
                            </itemizedlist>
                        </listitem>
                    </itemizedlist>
                </listitem>

                <listitem>
                    <para>ZF_INCLUDE_PATH</para>

                    <itemizedlist>
                        <listitem>
                            <para>
                                Setzt den include_path der für dieses Tool verwendet werden soll
                                auf diesen Wert
                            </para>
                        </listitem>

                        <listitem>
                            <para>Originales Verhalten:</para>

                            <itemizedlist>
                                <listitem>
                                    <para>Verwende include_path von PHP um ZF zu finden</para>
                                </listitem>

                                <listitem>
                                    <para>Verwende die Umgebungsvariable ZF_INCLUDE_PATH</para>
                                </listitem>

                                <listitem>
                                    <para>
                                        Verwende den Pfad ../library (relativ zu zf.php) um ZF zu
                                        finden
                                    </para>
                                </listitem>
                            </itemizedlist>
                        </listitem>
                    </itemizedlist>
                </listitem>

                <listitem>
                    <para>ZF_INCLUDE_PATH_PREPEND</para>

                    <itemizedlist>
                        <listitem>
                            <para>
                                Stellt diesen Wert dem aktuellen include_path in php.ini voran
                            </para>
                        </listitem>
                    </itemizedlist>
                </listitem>
            </itemizedlist>
        </sect3>
    </sect2>
</sect1>
