| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15617 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.tool.framework.writing-providers">
- <title>Erstellen von Providern für die Verwendung mit Zend_Tool_Framework</title>
- <para>
- 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.
- </para>
- <sect2 id="zend.tool.framework.writing-providers.basic">
- <title>Grundsätzliche Anweisungen für die Erstellung von Providern</title>
- <para>
- 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
- <code>My_Component</code>, dann würde er eine Klasse erstellen die
- <code>My_Component_HelloProvider</code> heisst und in einer Datei ist die
- <code>HelloProvider.php</code> heisst und irgendwo im <code>include_path</code> ist.
- Diese Klasse würde <classname>Zend_Tool_Framework_Provider_Interface</classname>
- implementieren, und der Body dieser Datei würde nur wie folgt auszusehen haben:
- </para>
- <programlisting language="php"><![CDATA[
- class My_Component_HelloProvider
- implements Zend_Tool_Framework_Provider_Interface
- {
- public function say()
- {
- echo 'Hallo von meinem Provider!';
- }
- }
- ]]></programlisting>
- <para>
- 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:
- </para>
- <programlisting language="sh"><![CDATA[
- % zf say hello
- Hello from my provider!
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.tool.framework.writing-providers.advanced">
- <title>Fortgeschrittene Informationen für die Entwicklung</title>
- <para>
- 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.
- </para>
- <para>
- 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:
- </para>
- <programlisting language="php"><![CDATA[
- class My_Component_HelloProvider
- implements Zend_Tool_Framework_Provider_Interface
- {
- public function say($name = 'Ralph')
- {
- echo 'Hallo' . $name . ', von meinem Provider!';
- }
- }
- ]]></programlisting>
- <para>
- Das obige Beispiel kann pber di Kommandozeile wie folgt aufgerufen werden:
- <code>zf say hello Joe</code>. "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
- <code>zf say hello</code> weiterhin funktioniert, und der Standardname "Ralph" ist.
- </para>
- <para>
- Ein anderes interessantes Feature das man implementieren kann ist
- <emphasis>Voranstellbarkeit</emphasis>. 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 <emphasis>würde</emphasis> 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.
- </para>
- <para>
- 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.
- </para>
- <programlisting language="php"><![CDATA[
- class My_Component_HelloProvider
- extends Zend_Tool_Framework_Provider_Abstract
- implements Zend_Tool_Framework_Provider_Pretendable
- {
- public function say($name = 'Ralph')
- {
- if ($this->_registry->getRequest()->isPretend()) {
- echo 'Ich würde zu ' . $name . ' hallo sagen.';
- } else {
- echo 'Hallo' . $name . ', von meinem Provider!';
- }
- }
- }
- ]]></programlisting>
- </sect2>
- </sect1>
|