Erstellen von Providern für die Verwendung mit Zend_Tool_Framework
Generell ist ein Provider für sich selbst nichts mehr als die Shell für einen Entwickler
um einige Fähigkeiten zu bündeln die man mit dem Kommandozeilen (oder einem anderen)
Client ausliefern will. Das ist analog zu dem was ein "Controller" in einer MVC Anwendung
ist.
Grundsätzliche Anweisungen für die Erstellung von Providern
Wenn, als Beispiel, ein Entwickler die Fähigkeit hinzufügen will, die Version einer
Datendatei anzuzeigen, mit der seine 3rd Party Komponente arbeitet, gibt es nur eine
Klasse die der Entwickler implementieren muss. Angenommen die Komponente heisst
My_Component, dann würde er eine Klasse erstellen die
My_Component_HelloProvider heisst und in einer Datei ist die
HelloProvider.php heisst und irgendwo im include_path ist.
Diese Klasse würde Zend_Tool_Framework_Provider_Interface
implementieren, und der Body dieser Datei würde nur wie folgt auszusehen haben:
Durch den obigen Code, und der Annahme das der Entwickler den Zugriff auf diese
funktionalität über den Consolen Client will, würde der Aufruf wie folgt aussehen:
Fortgeschrittene Informationen für die Entwicklung
Das obige "Hello World" Beispiel ist perfekt für einfache Kommandos, aber was ist mit
etwas fortgeschrittenerem? Wenn das Scripting und Tooling wächst, kann die
Notwendigkeit entstehen Variablen zu akzeptieren. So wie Signaturen von Funktionen
Parameter haben, kann eine Tooling Anfrage auch Parameter akzeptieren.
So wie jede Tooling Anfrage in einer Methode in einer Klasse isoliert werden kann,
können die Parameter einer Tooling Anfrage auch in einem sehr bekannten Platz isoliert
werden. Parameter von Action Methoden eines Providers können die selben Parameter
enthalten die man im Client verwenden will, wenn man den Namen im obigen Beispiel
akzeptieren will, und man würde das in OO Code warscheinlich wie folgt tun:
Das obige Beispiel kann pber di Kommandozeile wie folgt aufgerufen werden:
zf say hello Joe. "Joe" wird dem Provider als Parameter des
Methodenaufrufs zur Verfügung gestellt. Es ist auch zu beachten das der Parameter
optional ist, was bedeutet das er auch auf der Kommandozeile optional ist, so das
zf say hello weiterhin funktioniert, und der Standardname "Ralph" ist.
Ein anderes interessantes Feature das man implementieren kann ist
Voranstellbarkeit. Voranstellbarkeit ist die Fähigkeit des
Providers "Voranzustellen" wie wenn er die angefragte Aktion und Provider
Kombination ausführt, und dem Benutzer so viel Information wie möglich darüber gibt
was er tun würde ohne es wirklich zu tun. Das kann eine wichtige
Option sein wenn viele Datenbank oder Dateisystem Änderungen durchzuführen sind, die
der Benutzer andernfalls nicht tun würde.
Voranstellbarkeit ist einfach zu implementieren. Es gibt zwei Teile dieses Features:
1) Markieren des Providers, das er die Fähigkeit des "voranstellens" hat und 2) prüfen
der Anfrage um Sicherzustellen das die aktuelle Anfrage wirklich das "voranstellen"
angefragt hat. Dieses Feature wird im nächsten Code Beispiel demonstriert.
_registry->getRequest()->isPretend()) {
echo 'Ich würde zu ' . $name . ' hallo sagen.';
} else {
echo 'Hallo' . $name . ', von meinem Provider!';
}
}
}
]]>