# Verwendung von Zend_Tool auf der Kommandozeile

Das CLI, oder Kommandozeilentool (intern bekannt als Konsolen Tool), ist aktuell das primäre Interface für die Bearbeitung von `Zend_Tool` Anfragen. Mit dem CLI 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 `cmd.exe`, Console2 und auch im Cygwin Projekt.

## Installation

### Herunterladen und anfangen

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 gleichen Verzeichnis zu platzieren wie die PHP CLI Binardatei.

### Installation über Pear

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.

    pear channel-discover pear.zfcampus.org
    pear install zfcampus/zf

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.

### Installation von Hand

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).

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).

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.

## Kommandos für allgemeine Zwecke

### Version

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

    zf show version

### Eingebaute Hilfe

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:

    zf --help

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:

    zf ? controller

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

    zf show ?

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:

    zf show version.? (zeige alle Spezialitäten)
    zf show version ? (zeige alle Optionen)

### Manifest

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.

    zf show manifest

## Projektspezifische Kommandos

### Project

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.

    zf create project MyProjectName

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.

### Module

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:

    zf create module Blog

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

### Controller

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:

    zf create controller Auth

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:

    zf create controller Post 1 Blog
    zf create controller Post -m Blog
    zf create controller Post --module=Blog

Beachte: Im ersten Kommando ist der Wert 1 für das "includeIndexAction" Flag.

### Action

Um eine Action in einem bestehenden Controller zu erstellen:

    zf create action login Auth
    zf create action login -c Auth
    zf create action login --controller-name=Auth

### View

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

    zf create view Auth my-script-name
    zf create view -c Auth -a my-script-name

Das erstellt ein View Skript im Controller Verzeichnis von Auth.

### Model

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

    zf create model User

Wenn man ein Modell mit einem spezifischen Modul erstellen will:

    zf create model Post -m Blog

Das obige erstellt ein 'Post' Modell im Modul 'Blog'.

### Form

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:

    zf create form Auth

Wenn man ein Modell in einem spezifischen Modul erstellen will:

    zf create form Comment -m Blog

Das obige erstellt ein 'Comment' Formular im Modul 'Blog'.

### DbAdapter

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

Um zum Beispiel die folgenden Informationen einzugeben:

- adapter: Pdo_Mysql

- username: test

- password: test

- dbname: test

Muss das folgende auf der Kommandozeile ausgeführt werden:

    zf configure dbadapter "adapter=Pdo_Mysql&username=test&password=test&dbname=test"

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:

    zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/test.db" development
    zf configure dbadapter "adapter=Pdo_Sqlite&dbname=../data/test.db" -s development

### DbTable

Der DbTable Provider ist für die Erstellung der `Zend_Db_Table` 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 DbTable Name und der aktuelle Name der Datenbank Tabelle. Zum Beispiel:

    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

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.

    zf create dbtable.from-database

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.

    zf -p create dbtable.from-database

### Layout

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.

    zf enable layout

## Anpassung der Umgebung

### Das Speicherverzeichnis

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.

    zf --setup storage-directory

### Die Konfigurationsdatei

Das erstellt die richtige zf.ini Datei. Dies sollte nach `zf --setup storage-directory` 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.

    zf --setup config-file

### Orte der Umgebung

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

- ZF_HOME

  - Das Verzeichnis, in dem dieses Tool nach dem Home-Verzeichnis nachsieht

  - Das Verzeichnis muss existieren

  - Suchrichtung:

    - ZF_HOME Umgebungsvariable

    - HOME Umgebungsvariable

    - dann HOMEPATH Umgebungsvariable

- ZF_STORAGE_DIRECTORY

  - Wo dieses Tool nach dem Speicherverzeichnis nachsehen wird

  - Das Verzeichnis muss existieren

  - Suchrichtung:

    - ZF_STORAGE_DIRECTORY Umgebungsvariable

    - $homeDirectory/.zf/ Verzeichnis

- ZF_CONFIG_FILE

  - Wo dieses Tool nach der Konfigurationsdatei nachsieht

  - Suchrichtung:

    - ZF_CONFIG_FILE Umgebungsvariable

    - $homeDirectory/.zf.ini Datei wenn sie existiert

    - $storageDirectory/zf.ini Datei wenn sie existiert

- ZF_INCLUDE_PATH

  - Setzt den include_path der für dieses Tool verwendet werden soll auf diesen Wert

  - Originales Verhalten:

    - Verwende include_path von PHP um ZF zu finden

    - Verwende die Umgebungsvariable ZF_INCLUDE_PATH

    - Verwende den Pfad ../library (relativ zu zf.php) um ZF zu finden

- ZF_INCLUDE_PATH_PREPEND

  - Stellt diesen Wert dem aktuellen include_path in php.ini voran