| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="learning.quickstart.create-project">
- <title>Das Projekt erstellen</title>
- <para>
- Um das eigene Projekt zu erstellen muss man zuerst Zend Framework herunterladen und
- extrahieren.
- </para>
- <sect2 id="learning.quickstart.create-project.install-zf">
- <title>Zend Framework installieren</title>
- <para>
- Der einfachste Weg um Zend Framework zusammen mit einem kompletten
- <acronym>PHP</acronym> Stack zu erhalten ist durch die Installation von <ulink
- url="http://www.zend.com/en/products/server-ce/downloads">Zend Server</ulink>.
- Zend Server hat native Installationsroutinen für Mac OSX, Windows, Fedora Core und
- Ubuntu, sowie ein universelles Installationspaket das mit den meisten Linux
- Distributionen kompatibel ist.
- </para>
- <para>
- Nachdem Zend Server installiert wurde, können die Framework Dateien bei Max OSX und
- Linux unter <filename>/usr/local/zend/share/ZendFramework</filename>, und bei Windows
- unter <filename>C:\Program Files\Zend\ZendServer\share\ZendFramework</filename> gefunden
- werden. Der <constant>include_path</constant> ist dann bereits konfiguriert um Zend
- Framework zu verwenden.
- </para>
- <para>
- Alternativ kann man <ulink url="http://framework.zend.com/download/latest">die letzte
- Version vom Zend Framework downloaden</ulink> und dessen Inhalt extrahieren; man sollte
- sich notieren wo man das tut.
- </para>
- <para>
- Optional kann der Pfad zum Unterverzeichnis <filename>library/</filename> des Archivs
- den eigenen <constant>include_path</constant> Einstellung in der
- <filename>php.ini</filename> hinzugefügt werden.
- </para>
- <para>
- Das ist es! Zend Framework ist jetzt installiert und bereit zur Verwendung.
- </para>
- </sect2>
- <sect2 id="learning.quickstart.create-project.create-project">
- <title>Das Projekt erstellen</title>
- <note>
- <title>zf Kommandozeilen Tool</title>
- <para>
- In der eigenen Zend Framework Installation ist ein Unterverzeichnis
- <filename>bin/</filename> welches die Skripte <filename>zf.sh</filename> und
- <filename>zf.bat</filename>, für Unix-basierende und Windows-basierende Benutzer
- enthält. Der absolute Pfad zu diesem Skript sollte notiert werden.
- </para>
- <para>
- Wo immer man einer Referenz auf den Befehl <filename>zf</filename> sieht, sollte der
- absolute Pfad zum Skript substituiert werden. Auf Unix-basierenden Systemen, könnte
- man die Alias Funktionalität der Shell verwenden:
- <command>alias zf.sh=path/to/ZendFramework/bin/zf.sh</command>.
- </para>
- <para>
- Wenn man Probleme hat das <command>zf</command> Kommandozeilen Tool zu konfigurieren
- sollte man in <link linkend="zend.tool.framework.clitool">das
- Handbuch</link> sehen.
- </para>
- </note>
- <para>
- Ein Terminal öffnen (in Windows, <command>Start -> Run</command> und anschließend
- <command>cmd</command> verwenden). Zum Verzeichnis in dem man das Projekt beginnen will
- navigieren. Anschließend den Pfad zum richtigen Skript verwenden und eines der folgenden
- ausführen:
- </para>
- <programlisting language="shell"><![CDATA[
- % zf create project quickstart
- ]]></programlisting>
- <para>
- Die Ausführung dieses Kommandos erstellt die grundsätzliche Site Struktur, inklusive den
- initialen Controllern und Views. Der Baum sieht wie folgt aus:
- </para>
- <programlisting language="text"><![CDATA[
- quickstart
- |-- application
- | |-- Bootstrap.php
- | |-- configs
- | | `-- application.ini
- | |-- controllers
- | | |-- ErrorController.php
- | | `-- IndexController.php
- | |-- models
- | `-- views
- | |-- helpers
- | `-- scripts
- | |-- error
- | | `-- error.phtml
- | `-- index
- | `-- index.phtml
- |-- library
- |-- public
- | |-- .htaccess
- | `-- index.php
- `-- tests
- |-- application
- | `-- bootstrap.php
- |-- library
- | `-- bootstrap.php
- `-- phpunit.xml
- ]]></programlisting>
- <para>
- Wenn man an diesem Punkt, Zend Framework dem eigenen <constant>include_path</constant>
- nicht hunzugefügt hat, empfehlen wir Ihn entweder in das eigene
- <filename>library/</filename> Verzeichnis zu kopieren oder zu symlinken. In jedem Fall
- sollte man entweder das <filename>library/Zend/</filename> Verzeichnis der Zend
- Framework Installation rekursiv in das <filename>library/</filename> Verzeichnis des
- Projekts kopieren oder symlinken. Auf unix-artigen Systemen würde das wie folgt
- aussehen:
- </para>
- <programlisting language="shell"><![CDATA[
- # Symlink:
- % cd library; ln -s path/to/ZendFramework/library/Zend .
- # Copy:
- % cd library; cp -r path/to/ZendFramework/library/Zend .
- ]]></programlisting>
- <para>
- Auf Windows Systemen ist es am einfachsten das vom Explorer zu tun.
- </para>
- <para>
- Jetzt da das Projekt erstellt wurde, sind die hauptsächlichen Artefakte die man
- verstehen sollte, die Bootstrap, die Konfiguration, die Action Controller und die Views.
- </para>
- </sect2>
- <sect2 id="learning.quickstart.create-project.bootstrap">
- <title>Die Bootstrap</title>
- <para>
- Die <classname>Bootstrap</classname> Klasse definiert welche Ressourcen und Komponenten
- zu initialisieren sind. Standardmäßig wird Zend Framework's <link
- linkend="zend.controller.front">Front Controller</link> initialisiert und er
- verwendet <filename>application/controllers/</filename> als Standardverzeichnis in dem
- nach Action Controllern nachgesehen wird (mehr davon später). Die Klasse sieht wie
- folgt aus:
- </para>
- <programlisting language="php"><![CDATA[
- // application/Bootstrap.php
- class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
- {
- }
- ]]></programlisting>
- <para>
- Wie man sieht ist nicht viel notwendig um zu beginnen.
- </para>
- </sect2>
- <sect2 id="learning.quickstart.create-project.configuration">
- <title>Konfiguration</title>
- <para>
- Wärend Zend Framework selbst konfigurationslos ist, ist es oft notwendig die eigene
- Anwendung zu konfigurieren. Die Standardkonfiguration wird in
- <filename>application/configs/application.ini</filename> platziert und enthält einige
- grundsätzliche Direktiven für die Einstellung der <acronym>PHP</acronym> Umgebung (zum
- Beispiel ein- und ausschalten der Fehlermeldungen), zeigt den Pfad zur eigenen Bootstrap
- Klasse (wie auch dessen Klassenname), und den Pfad zu den eigenen Action Controllern.
- Das sieht wie folgt aus:
- </para>
- <programlisting language="ini"><![CDATA[
- ; application/configs/application.ini
- [production]
- phpSettings.display_startup_errors = 0
- phpSettings.display_errors = 0
- includePaths.library = APPLICATION_PATH "/../library"
- bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
- bootstrap.class = "Bootstrap"
- appnamespace = "Application"
- resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
- resources.frontController.params.displayExceptions = 0
- [staging : production]
- [testing : production]
- phpSettings.display_startup_errors = 1
- phpSettings.display_errors = 1
- [development : production]
- phpSettings.display_startup_errors = 1
- phpSettings.display_errors = 1
- ]]></programlisting>
- <para>
- Verschiedene Dinge sollten über diese Datei gesagt werden. Erstens kann man, wenn
- <acronym>INI</acronym>-artige Konfigurationen verwendet werden, direkt auf Konstanten
- referenzieren und Sie erweitern; <constant>APPLICATION_PATH</constant> selbst ist eine
- Konstante. Zusätzlich ist zu beachten das es verschiedene definierte Sektionen gibt:
- production, staging, testing, und development. Die letzten drei verweisen auf
- Einstellungen der "production" Umgebung. Das ist ein nützlicher Weg die Konfiguration zu
- organisieren und stellt sicher das die richtigen Einstellungen in jeder Stufe der
- Anwendungsentwicklung vorhanden sind.
- </para>
- </sect2>
- <sect2 id="learning.quickstart.create-project.action-controllers">
- <title>Action Controller</title>
- <para>
- Die <emphasis>Action Controller</emphasis> der Anwendung enthalten den Workflow der
- Anwendung und mappen eigene Anfragen auf die richtigen Modelle und Views.
- </para>
- <para>
- Ein Action Controller sollte ein oder mehrere Methoden haben die auf "Action" enden;
- diese Methoden können über das Web abgefragt werden. Standardmäßig folgen Zend Framework
- URL's dem Schema <constant>/controller/action</constant> wobei "controller" auf den
- Namen des Action Controllers verweist (ohne den "Controller" Suffix) und "action" auf
- eine Action Methode verweist (ohne den "Action" Suffix).
- </para>
- <para>
- Typischerweise benötigt man immer einen <classname>IndexController</classname>, der ein
- Fallback Controller ist und auch als Homepage der Site arbeitet, und einen
- <classname>ErrorController</classname> der verwendet wird um Dinge wie
- <acronym>HTTP</acronym> 404 Fehler zu zeigen (wenn der Controller oder die Action nicht
- gefunden wird) und <acronym>HTTP</acronym> 500 Fehler (Anwendungsfehler).
- </para>
- <para>
- Der standardmäßige <classname>IndexController</classname> ist wie folgt:
- </para>
- <programlisting language="php"><![CDATA[
- // application/controllers/IndexController.php
- class IndexController extends Zend_Controller_Action
- {
- public function init()
- {
- /* Den Action Controller hier initialisieren */
- }
- public function indexAction()
- {
- // Action Body
- }
- }
- ]]></programlisting>
- <para>
- Und der standardmäßige <classname>ErrorController</classname> ist wie folgt:
- </para>
- <programlisting language="php"><![CDATA[
- // application/controllers/ErrorController.php
- class ErrorController extends Zend_Controller_Action
- {
- public function errorAction()
- {
- $errors = $this->_getParam('error_handler');
- switch ($errors->type) {
- case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
- case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
- case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
- // 404 Fehler -- Controller oder Action nicht gefunden
- $this->getResponse()->setHttpResponseCode(404);
- $this->view->message = 'Page not found';
- break;
- default:
- // Anwendungsfehler
- $this->getResponse()->setHttpResponseCode(500);
- $this->view->message = 'Application error';
- break;
- }
- $this->view->exception = $errors->exception;
- $this->view->request = $errors->request;
- }
- }
- ]]></programlisting>
- <para>
- Es ist zu sehen das (1) der <classname>IndexController</classname> keinen echten Code
- enthält, und (2) der <classname>ErrorController</classname> auf eine "view" Eigenschaft
- verweist. Das führt schon zu unserem nächsten Subjekt.
- </para>
- </sect2>
- <sect2 id="learning.quickstart.create-project.views">
- <title>Views</title>
- <para>
- Views werden im Zend Framework in reinem alten <acronym>PHP</acronym> geschrieben. View
- Skripte werden unter <filename>application/views/scripts/</filename> platziert, wo Sie
- weiters kategorisiert werden indem der Name des Controllers verwendet wird. In unserem
- Fall haben wir einen <classname>IndexController</classname> und einen
- <classname>ErrorController</classname>, und deshalb haben wir entsprechende
- <filename>index/</filename> und <filename>error/</filename> Unterverzeichnisse in
- unserem View Skript Verzeichnis. In diesem Unterverzeichnissen finden und erstellen wir
- anschließend View Skripte die jeder ausgeführten Controller Action entsprechen; im
- Standardfall haben wir die View Skripte <filename>index/index.phtml</filename> und
- <filename>error/error.phtml</filename>.
- </para>
- <para>
- View Skripte können jedes Markup enthalten das man haben will, und verwenden das
- öffnende <emphasis><?php</emphasis> Tag und das schließende
- <emphasis>?></emphasis> Tag um <acronym>PHP</acronym> Direktiven einzufügen.
- </para>
- <para>
- Das folgende wird standardmäßig für das <filename>index/index.phtml</filename> View
- Skript installiert:
- </para>
- <programlisting language="php"><![CDATA[
- <!-- application/views/scripts/index/index.phtml -->
- <style>
- a:link,
- a:visited
- {
- color: #0398CA;
- }
- span#zf-name
- {
- color: #91BE3F;
- }
- div#welcome
- {
- color: #FFFFFF;
- background-image: url(http://framework.zend.com/images/bkg_header.jpg);
- width: 600px;
- height: 400px;
- border: 2px solid #444444;
- overflow: hidden;
- text-align: center;
- }
- div#more-information
- {
- background-image: url(http://framework.zend.com/images/bkg_body-bottom.gif);
- height: 100%;
- }
- </style>
- <div id="welcome">
- <h1>Willkommen zum <span id="zf-name">Zend Framework!</span><h1 />
- <h3>Das ist die Hauptseite unseres Projekts<h3 />
- <div id="more-information">
- <p>
- <img src="http://framework.zend.com/images/PoweredBy_ZF_4LightBG.png" />
- </p>
- <p>
- Hilfreiche Links: <br />
- <a href="http://framework.zend.com/">Zend Framework Website</a> |
- <a href="http://framework.zend.com/manual/en/">Zend Framework
- Handbuch</a>
- </p>
- </div>
- </div>
- ]]></programlisting>
- <para>
- Das <filename>error/error.phtml</filename> View Skript ist etwas interessanter da es
- einige <acronym>PHP</acronym> Konditionen verwendet:
- </para>
- <programlisting language="php"><![CDATA[
- <!-- application/views/scripts/error/error.phtml -->
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN";
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Zend Framework Standardanwendung</title>
- </head>
- <body>
- <h1>Ein Fehler ist aufgetreten</h1>
- <h2><?php echo $this->message ?></h2>
- <?php if ('development' == $this->env): ?>
- <h3>Information der Exception:</h3>
- <p>
- <b>Nachricht:</b> <?php echo $this->exception->getMessage() ?>
- </p>
- <h3>Stack Trace:</h3>
- <pre><?php echo $this->exception->getTraceAsString() ?>
- </pre>
- <h3>Anfrage Parameter:</h3>
- <pre><?php echo var_export($this->request->getParams(), 1) ?>
- </pre>
- <?php endif ?>
- </body>
- </html>
- ]]></programlisting>
- </sect2>
- <sect2 id="learning.quickstart.create-project.vhost">
- <title>Einen virtuellen Host erstellen</title>
- <para>
- Für die Zwecke dieses Quickstarts nehmen wir an das der <ulink
- url="http://httpd.apache.org/">Apache Web Server</ulink> verwendet wird. Zend
- Framework arbeitet auch perfekt mit anderen Web Server -- inklusive Microsoft
- Internet Information Server, Lighttpd, Nginx und andere -- aber die meisten
- Entwickler sollten zumindest mit Apache umgehen können, und es bietet eine einfache
- Einführung in Zend Framework's Verzeichnisstruktur und die Möglichkeiten des
- Rewritings.
- </para>
- <para>
- Um den eigenen VHost zu erstellen muss man den Ort der eigenen
- <filename>httpd.conf</filename> Datei kennen und potentiell auch wo andere
- Konfigurationsdateien platziert sind. Einige übliche Orte sind:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <filename>/etc/httpd/httpd.conf</filename> (Fedora, RHEL, und andere)
- </para>
- </listitem>
- <listitem>
- <para>
- <filename>/etc/apache2/httpd.conf</filename> (Debian, Ubuntu, und andere)
- </para>
- </listitem>
- <listitem>
- <para>
- <filename>/usr/local/zend/etc/httpd.conf</filename> (Zend Server auf *nix
- Maschinen)
- </para>
- </listitem>
- <listitem>
- <para>
- <filename>C:\Program Files\Zend\Apache2\conf</filename> (Zend Server auf Windows
- Maschinen)
- </para>
- </listitem>
- </itemizedlist>
- <para>
- In der eigenen <filename>httpd.conf</filename> (oder
- <filename>httpd-vhosts.conf</filename> auf anderen Systemen) muss man zwei Dinge tun.
- Erstens sicherstellen das der <varname>NameVirtualHost</varname> definiert ist;
- typischerweise wird man Ihn auf einen Wert von "*:80" setzen. Zweitens einen
- virtuellen Host definieren:
- </para>
- <programlisting language="apache"><![CDATA[
- <VirtualHost *:80>
- ServerName quickstart.local
- DocumentRoot /path/to/quickstart/public
- SetEnv APPLICATION_ENV "development"
- <Directory /path/to/quickstart/public>
- DirectoryIndex index.php
- AllowOverride All
- Order allow,deny
- Allow from all
- </Directory>
- </VirtualHost>
- ]]></programlisting>
- <para>
- Es gilt verschiedene Dinge zu beachten. Erstens ist zu beachten dass die
- <varname>DocumentRoot</varname> Einstellung das Unterverzeichnis
- <filename>public</filename> des eigenen Projekts spezifiziert; dies bedeutet das nur
- Dateien in diesem Verzeichnis jemals direkt vom Server serviert werden. Zweitens sind
- die Direktiven <varname>AllowOverride</varname>, <varname>Order</varname>, und
- <varname>Allow</varname> zu beachten; diese erlauben uns <filename>htacess</filename>
- Dateien in unserem Projekt zu verwenden. Wärend der Entwicklung ist das eine gute
- Praxis, da es verhindert den Web Server konstant zurücksetzen zu müssen wenn man
- Änderungen in den Site Direktiven macht; trotzdem sollte man in der Produktion den
- Inhalt der <filename>htacess</filename> Datei in die Server Konfiguration verschieben
- und diese deaktivieren. Drittens ist die <varname>SetEnv</varname> Direktive zu
- beachten. Was wir hier erledigen ist das Setzen einer Umgebungsvariable für den
- eigenen virtuellen Host; diese Variable wird in der <filename>index.php</filename>
- geholt und verwendet um die Konstante <constant>APPLICATION_ENV</constant> für unsere
- Zend Framework Anwendung zu setzen. In der Produktion kann diese Direktive unterdrückt
- werden (in diesem Fall wird es auf den Standardwert "production" verweisen) oder Sie
- explizit auf "production" setzen.
- </para>
- <para>
- Letztendlich muss man einen Eintrag in der eigenen <filename>hosts</filename> Datei
- hinzufügen welche mit dem Wert korrespondiert der in der <varname>ServerName</varname>
- Direktive plaziert wurde. Auf *nix-artigen Systemen ist das normalerweise
- <filename>/etc/hosts</filename>; auf Windows findet man typischerweise
- <filename>C:\WINDOWS\system32\drivers\etc</filename> in Ihm. Unabhängig vom System
- sieht der Eintrag wie folgt aus:
- </para>
- <programlisting language="text"><![CDATA[
- 127.0.0.1 quickstart.local
- ]]></programlisting>
- <para>
- Den Webserver starten (oder ihn Restarten), und man sollte bereit sein weiterzumachen.
- </para>
- </sect2>
- <sect2 id="learning.quickstart.create-project.checkpoint">
- <title>Checkpoint</title>
- <para>
- An diesem Punkt sollte man in der Lage sein die initiale Zend Framework Anwendung
- auszuführen. Der Browser sollte auf den Servernamen zeigen welcher im vorherigen
- Abschnitt konfiguriert wurde; ab diesem Zeitpunkt sollte man in der Lage sein die
- Startseite zu sehen.
- </para>
- </sect2>
- </sect1>
|