quickstart-create-project.xml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 19777 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.quickstart.create-project">
  5. <title>Das Projekt erstellen</title>
  6. <para>
  7. Um das eigene Projekt zu erstellen muss man zuerst Zend Framework herunterladen und
  8. extrahieren.
  9. </para>
  10. <sect2 id="learning.quickstart.create-project.install-zf">
  11. <title>Zend Framework installieren</title>
  12. <para>
  13. Der einfachste Weg um Zend Framework zusammen mit einem kompletten PHP Stack zu
  14. erhalten ist durch die Installation von <ulink
  15. url="http://www.zend.com/en/products/server-ce/downloads">Zend Server</ulink>.
  16. Zend Server hat native Installationsroutinen für Mac OSX, Windows, Fedora Core und
  17. Ubuntu, sowie ein universelles Installationspaket das mit den meisten Linux
  18. Distributionen kompatibel ist.
  19. </para>
  20. <para>
  21. Nachdem Zend Server installiert wurde, können die Framework Dateien bei Max OSX unter
  22. <filename>/Applications/ZendServer/share/ZendFramework</filename>, bei Windows unter
  23. <filename>C:\Program Files\Zend\ZendServer\share\ZendFramework</filename> und bei Linux
  24. unter <filename>/usr/local/zend/share/ZendFramework</filename> gefunden werden. Der
  25. <constant>include_path</constant> ist dann bereits konfiguriert um Zend Framework zu
  26. verwenden.
  27. </para>
  28. <para>
  29. Alternativ kann man <ulink url="http://framework.zend.com/download/latest">die letzte
  30. Version vom Zend Framework downloaden</ulink> und dessen Inhalt extrahieren; man sollte
  31. sich notieren wo man das tut.
  32. </para>
  33. <para>
  34. Optional kann der Pfad zum Unterverzeichnis <filename>library/</filename> des Archivs
  35. den eigenen <constant>include_path</constant> Einstellung in der
  36. <filename>php.ini</filename> hinzugefügt werden.
  37. </para>
  38. <para>
  39. Das ist es! Zend Framework ist jetzt installiert und bereit zur Verwendung.
  40. </para>
  41. </sect2>
  42. <sect2 id="learning.quickstart.create-project.create-project">
  43. <title>Das Projekt erstellen</title>
  44. <note>
  45. <title>zf Kommandozeilen Tool</title>
  46. <para>
  47. In der eigenen Zend Framework Installation ist ein Unterverzeichnis
  48. <filename>bin/</filename> welches die Skripte <filename>zf.sh</filename> und
  49. <filename>zf.bat</filename>, für Unix-basierende und Windows-basierende Benutzer
  50. enthält. Der absolute Pfad zu diesem Skript sollte notiert werden.
  51. </para>
  52. <para>
  53. Woimmer man einer Referenz zu <filename>zf.sh</filename> oder
  54. <filename>zf.bat</filename> sieht, sollte der absolute Pfad zum Skript substituiert
  55. werden. Auf Unix-basierenden Systemen, könnte man die Alias Funktionalität der Shell
  56. verwenden: <command>alias zf.sh=path/to/ZendFramework/bin/zf.sh</command>.
  57. </para>
  58. <para>
  59. Wenn man Probleme hat das <command>zf</command> Kommandozeilen Tool zu konfigurieren
  60. sollte man in <link linkend="zend.tool.framework.clitool.setup-general">das
  61. Handbuch</link> sehen.
  62. </para>
  63. </note>
  64. <para>
  65. Ein Terminal öffnen (in Windows, <command>Start -> Run</command> und anschließend
  66. <command>cmd</command> verwenden). Zum Verzeichnis in dem man das Projekt beginnen will
  67. navigieren. Anschließend den Pfad zum richtigen Skript verwenden und eines der folgenden
  68. ausführen:
  69. </para>
  70. <programlisting language="shell"><![CDATA[
  71. # Unix:
  72. % zf.sh create project quickstart
  73. # DOS/Windows:
  74. C:> zf.bat create project quickstart
  75. ]]></programlisting>
  76. <para>
  77. Die Ausführung dieses Kommandos erstellt die grundsätzliche Site Struktur, inklusive den
  78. initialen Controllern und Views. Der Baum sieht wie folgt aus:
  79. </para>
  80. <programlisting language="text"><![CDATA[
  81. quickstart
  82. |-- application
  83. | |-- Bootstrap.php
  84. | |-- configs
  85. | | `-- application.ini
  86. | |-- controllers
  87. | | |-- ErrorController.php
  88. | | `-- IndexController.php
  89. | |-- models
  90. | `-- views
  91. | |-- helpers
  92. | `-- scripts
  93. | |-- error
  94. | | `-- error.phtml
  95. | `-- index
  96. | `-- index.phtml
  97. |-- library
  98. |-- public
  99. | `-- index.php
  100. `-- tests
  101. |-- application
  102. | `-- bootstrap.php
  103. |-- library
  104. | `-- bootstrap.php
  105. `-- phpunit.xml
  106. ]]></programlisting>
  107. <para>
  108. Wenn man an diesem Punkt, Zend Framework dem eigenen <constant>include_path</constant>
  109. nicht hunzugefügt hat, empfehlen wir Ihn entweder in das eigene
  110. <filename>library/</filename> Verzeichnis zu kopieren oder zu symlinken. In jedem Fall
  111. sollte man entweder das <filename>library/Zend/</filename> Verzeichnis der Zend
  112. Framework Installation rekursiv in das <filename>library/</filename> Verzeichnis des
  113. Projekts kopieren oder symlinken. Auf unix-artigen Systemen würde das wie folgt
  114. aussehen:
  115. </para>
  116. <programlisting language="shell"><![CDATA[
  117. # Symlink:
  118. % cd library; ln -s path/to/ZendFramework/library/Zend .
  119. # Copy:
  120. % cd library; cp -r path/to/ZendFramework/library/Zend .
  121. ]]></programlisting>
  122. <para>
  123. Auf Windows Systemen ist es am einfachsten das vom Explorer zu tun.
  124. </para>
  125. <para>
  126. Jetzt da das Projekt erstellt wurde, sind die hauptsächlichen Artefakte die man
  127. verstehen sollte, die Bootstrap, die Konfiguration, die Action Controller und die Views.
  128. </para>
  129. </sect2>
  130. <sect2 id="learning.quickstart.create-project.bootstrap">
  131. <title>Die Bootstrap</title>
  132. <para>
  133. Die <classname>Bootstrap</classname> Klasse definiert welche Ressourcen und Komponenten
  134. zu initialisieren sind. Standardmäßig wird Zend Framework's <link
  135. linkend="zend.controller.front">Front Controller</link>initialisiert und er
  136. verwendet <filename>application/controllers/</filename> als Standardverzeichnis in dem
  137. nach Action Controllern nachgesehen wird (mehr davon später). Die Klasse sieht wie
  138. folgt aus:
  139. </para>
  140. <programlisting language="php"><![CDATA[
  141. // application/Bootstrap.php
  142. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  143. {
  144. }
  145. ]]></programlisting>
  146. <para>
  147. Wie man sieht ist nicht viel notwendig um zu beginnen.
  148. </para>
  149. </sect2>
  150. <sect2 id="learning.quickstart.create-project.configuration">
  151. <title>Konfiguration</title>
  152. <para>
  153. Wärend Zend Framework selbst konfigurationslos ist, ist es oft notwendig die eigene
  154. Anwendung zu konfigurieren. Die Standardkonfiguration wird in
  155. <filename>application/configs/application.ini</filename> platziert und enthält einige
  156. grundsätzliche Direktiven für die Einstellung der PHP Umgebung (zum Beispiel ein- und
  157. ausschalten der Fehlermeldungen), zeigt den Pfad zur eigenen Bootstrap Klasse (wie auch
  158. dessen Klassenname), und den Pfad zu den eigenen Action Controllern. Das sieht wie folgt
  159. aus:
  160. </para>
  161. <programlisting language="ini"><![CDATA[
  162. ; application/configs/application.ini
  163. [production]
  164. phpSettings.display_startup_errors = 0
  165. phpSettings.display_errors = 0
  166. includePaths.library = APPLICATION_PATH "/../library"
  167. bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
  168. bootstrap.class = "Bootstrap"
  169. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
  170. [staging : production]
  171. [testing : production]
  172. phpSettings.display_startup_errors = 1
  173. phpSettings.display_errors = 1
  174. [development : production]
  175. phpSettings.display_startup_errors = 1
  176. phpSettings.display_errors = 1
  177. ]]></programlisting>
  178. <para>
  179. Verschiedene Dinge sollten über diese Datei gesagt werden. Erstens kann man, wenn
  180. INI-artige Konfigurationen verwendet werden, direkt auf Konstanten referenzieren und Sie
  181. erweitern; <constant>APPLICATION_PATH</constant> selbst ist eine Konstante. Zusätzlich
  182. ist zu beachten das es verschiedene definierte Sektionen gibt: production, staging,
  183. testing, und development. Die letzten drei verweisen auf Einstellungen der
  184. "production" Umgebung. Das ist ein nützlicher Weg die Konfiguration zu organisieren und
  185. stellt sicher das die richtigen Einstellungen in jeder Stufe der Anwendungsentwicklung
  186. vorhanden sind.
  187. </para>
  188. </sect2>
  189. <sect2 id="learning.quickstart.create-project.action-controllers">
  190. <title>Action Controller</title>
  191. <para>
  192. Die <emphasis>Action Controller</emphasis> der Anwendung enthalten den Workflow der
  193. Anwendung und mappen eigene Anfragen auf die richtigen Modelle und Views.
  194. </para>
  195. <para>
  196. Ein Action Controller sollte ein oder mehrere Methoden haben die auf "Action" enden;
  197. diese Methoden können über das Web abgefragt werden. Standardmäßig folgen Zend Framework
  198. URL's dem Schema <constant>/controller/action</constant> wobei "controller" auf den
  199. Namen des Action Controllers verweist (ohne den "Controller" Suffix) und "action" auf
  200. eine Action Methode verweist (ohne den "Action" Suffix).
  201. </para>
  202. <para>
  203. Typischerweise benötigt man immer einen <classname>IndexController</classname>, der ein
  204. Fallback Controller ist und auch als Homepage der Site arbeitet, und einen
  205. <classname>ErrorController</classname> der verwendet wird um Dinge wie HTTP 404 Fehler
  206. zu zeigen (wenn der Controller oder die Action nicht gefunden wird) und HTTP 500 Fehler
  207. (Anwendungsfehler).
  208. </para>
  209. <para>
  210. Der standardmäßige <classname>IndexController</classname> ist wie folgt:
  211. </para>
  212. <programlisting language="php"><![CDATA[
  213. // application/controllers/IndexController.php
  214. class IndexController extends Zend_Controller_Action
  215. {
  216. public function init()
  217. {
  218. /* Den Action Controller hier initialisieren */
  219. }
  220. public function indexAction()
  221. {
  222. // Action Body
  223. }
  224. }
  225. ]]></programlisting>
  226. <para>
  227. Und der standardmäßige <classname>ErrorController</classname> ist wie folgt:
  228. </para>
  229. <programlisting language="php"><![CDATA[
  230. // application/controllers/ErrorController.php
  231. class ErrorController extends Zend_Controller_Action
  232. {
  233. public function errorAction()
  234. {
  235. $errors = $this->_getParam('error_handler');
  236. switch ($errors->type) {
  237. case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
  238. case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
  239. // 404 Fehler -- Controller oder Action nicht gefunden
  240. $this->getResponse()->setHttpResponseCode(404);
  241. $this->view->message = 'Page not found';
  242. break;
  243. default:
  244. // Anwendungsfehler
  245. $this->getResponse()->setHttpResponseCode(500);
  246. $this->view->message = 'Application error';
  247. break;
  248. }
  249. $this->view->exception = $errors->exception;
  250. $this->view->request = $errors->request;
  251. }
  252. }
  253. ]]></programlisting>
  254. <para>
  255. Es ist zu sehen das (1) der <classname>IndexController</classname> keinen echten Code
  256. enthält, und (2) der <classname>ErrorController</classname> auf eine "view" Eigenschaft
  257. verweist. Das führt schon zu unserem nächsten Subjekt.
  258. </para>
  259. </sect2>
  260. <sect2 id="learning.quickstart.create-project.views">
  261. <title>Views</title>
  262. <para>
  263. Views werden im Zend Framework in reinem alten PHP geschrieben. View Skripte werden
  264. unter <filename>application/views/scripts/</filename> platziert, wo Sie weiters
  265. kategorisiert werden indem der Name des Controllers verwendet wird. In unserem Fall
  266. haben wir einen <classname>IndexController</classname> und einen
  267. <classname>ErrorController</classname>, und deshalb haben wir entsprechende
  268. <filename>index/</filename> und <filename>error/</filename> Unterverzeichnisse in
  269. unserem View Skript Verzeichnis. In diesem Unterverzeichnissen finden und erstellen wir
  270. anschließend View Skripte die jeder ausgeführten Controller Action entsprechen; im
  271. Standardfall haben wir die View Skripte <filename>index/index.phtml</filename> und
  272. <filename>error/error.phtml</filename>.
  273. </para>
  274. <para>
  275. View Skripte können jedes Markup enthalten das man haben will, und verwenden das
  276. öffnende <code>&lt;?php</code> Tag und das schließende <code>?&gt;</code> Tag um PHP
  277. Direktiven einzufügen.
  278. </para>
  279. <para>
  280. Das folgende wird standardmäßig für das <filename>index/index.phtml</filename> View
  281. Skript installiert:
  282. </para>
  283. <programlisting language="php"><![CDATA[
  284. <!-- application/views/scripts/index/index.phtml -->
  285. <style>
  286. a:link,
  287. a:visited
  288. {
  289. color: #0398CA;
  290. }
  291. span#zf-name
  292. {
  293. color: #91BE3F;
  294. }
  295. div#welcome
  296. {
  297. color: #FFFFFF;
  298. background-image: url(http://framework.zend.com/images/bkg_header.jpg);
  299. width: 600px;
  300. height: 400px;
  301. border: 2px solid #444444;
  302. overflow: hidden;
  303. text-align: center;
  304. }
  305. div#more-information
  306. {
  307. background-image: url(http://framework.zend.com/images/bkg_body-bottom.gif);
  308. height: 100%;
  309. }
  310. </style>
  311. <div id="welcome">
  312. <h1>Willkommen zum <span id="zf-name">Zend Framework!</span><h1 />
  313. <h3>Das ist die Hauptseite unseres Projekts<h3 />
  314. <div id="more-information">
  315. <p>
  316. <img src="http://framework.zend.com/images/PoweredBy_ZF_4LightBG.png" />
  317. </p>
  318. <p>
  319. Helpful Links: <br />
  320. <a href="http://framework.zend.com/">Zend Framework Website</a> |
  321. <a href="http://framework.zend.com/manual/en/">Zend Framework
  322. Handbuch</a>
  323. </p>
  324. </div>
  325. </div>
  326. ]]></programlisting>
  327. <para>
  328. Das <filename>error/error.phtml</filename> View Skript ist etwas interessanter da es
  329. einige PHP Konditionen verwendet:
  330. </para>
  331. <programlisting language="php"><![CDATA[
  332. <!-- application/views/scripts/error/error.phtml -->
  333. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN";
  334. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd>
  335. <html xmlns="http://www.w3.org/1999/xhtml">
  336. <head>
  337. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  338. <title>Zend Framework Standardanwendung</title>
  339. </head>
  340. <body>
  341. <h1>Ein Fehler ist aufgetreten</h1>
  342. <h2><?php echo $this->message ?></h2>
  343. <?php if ('development' == $this->env): ?>
  344. <h3>Information der Exception:</h3>
  345. <p>
  346. <b>Nachricht:</b> <?php echo $this->exception->getMessage() ?>
  347. </p>
  348. <h3>Stack Trace:</h3>
  349. <pre><?php echo $this->exception->getTraceAsString() ?>
  350. </pre>
  351. <h3>Anfrage Parameter:</h3>
  352. <pre><?php echo var_export($this->request->getParams(), 1) ?>
  353. </pre>
  354. <?php endif ?>
  355. </body>
  356. </html>
  357. ]]></programlisting>
  358. </sect2>
  359. <sect2 id="learning.quickstart.create-project.checkpoint">
  360. <title>Checkpoint</title>
  361. <para>
  362. An diesem Punkt sollte man in der Lage sein die initiale Zend Framework Anwendung
  363. auszuführen. Es sollte ein virtueller Host im eigenen Web Server erstellt werden und
  364. dessen Document Rook sollte auf das Unterverzeichnis <filename>public/</filename> der
  365. eigenen Anwendung zeigen. Man sollte sicherstellen das der eigene Hostname im eigenen
  366. DNS oder in der hosts Datei ist, und anschließend den Browser darauf zeigen lassen.
  367. An diesem Punkt sollte man in der Lage sein die Startseite zu sehen.
  368. </para>
  369. </sect2>
  370. </sect1>