2
0

quickstart-create-project.xml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20249 -->
  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 und
  22. Linux unter <filename>/usr/local/zend/share/ZendFramework</filename>, und bei Windows
  23. unter <filename>C:\Program Files\Zend\ZendServer\share\ZendFramework</filename> gefunden
  24. werden. Der <constant>include_path</constant> ist dann bereits konfiguriert um Zend
  25. Framework zu verwenden.
  26. </para>
  27. <para>
  28. Alternativ kann man <ulink url="http://framework.zend.com/download/latest">die letzte
  29. Version vom Zend Framework downloaden</ulink> und dessen Inhalt extrahieren; man sollte
  30. sich notieren wo man das tut.
  31. </para>
  32. <para>
  33. Optional kann der Pfad zum Unterverzeichnis <filename>library/</filename> des Archivs
  34. den eigenen <constant>include_path</constant> Einstellung in der
  35. <filename>php.ini</filename> hinzugefügt werden.
  36. </para>
  37. <para>
  38. Das ist es! Zend Framework ist jetzt installiert und bereit zur Verwendung.
  39. </para>
  40. </sect2>
  41. <sect2 id="learning.quickstart.create-project.create-project">
  42. <title>Das Projekt erstellen</title>
  43. <note>
  44. <title>zf Kommandozeilen Tool</title>
  45. <para>
  46. In der eigenen Zend Framework Installation ist ein Unterverzeichnis
  47. <filename>bin/</filename> welches die Skripte <filename>zf.sh</filename> und
  48. <filename>zf.bat</filename>, für Unix-basierende und Windows-basierende Benutzer
  49. enthält. Der absolute Pfad zu diesem Skript sollte notiert werden.
  50. </para>
  51. <para>
  52. Woimmer man einer Referenz zu <filename>zf.sh</filename> oder
  53. <filename>zf.bat</filename> sieht, sollte der absolute Pfad zum Skript substituiert
  54. werden. Auf Unix-basierenden Systemen, könnte man die Alias Funktionalität der Shell
  55. verwenden: <command>alias zf.sh=path/to/ZendFramework/bin/zf.sh</command>.
  56. </para>
  57. <para>
  58. Wenn man Probleme hat das <command>zf</command> Kommandozeilen Tool zu konfigurieren
  59. sollte man in <link linkend="zend.tool.framework.clitool.setup-general">das
  60. Handbuch</link> sehen.
  61. </para>
  62. </note>
  63. <para>
  64. Ein Terminal öffnen (in Windows, <command>Start -> Run</command> und anschließend
  65. <command>cmd</command> verwenden). Zum Verzeichnis in dem man das Projekt beginnen will
  66. navigieren. Anschließend den Pfad zum richtigen Skript verwenden und eines der folgenden
  67. ausführen:
  68. </para>
  69. <programlisting language="shell"><![CDATA[
  70. # Unix:
  71. % zf.sh create project quickstart
  72. # DOS/Windows:
  73. C:> zf.bat create project quickstart
  74. ]]></programlisting>
  75. <para>
  76. Die Ausführung dieses Kommandos erstellt die grundsätzliche Site Struktur, inklusive den
  77. initialen Controllern und Views. Der Baum sieht wie folgt aus:
  78. </para>
  79. <programlisting language="text"><![CDATA[
  80. quickstart
  81. |-- application
  82. | |-- Bootstrap.php
  83. | |-- configs
  84. | | `-- application.ini
  85. | |-- controllers
  86. | | |-- ErrorController.php
  87. | | `-- IndexController.php
  88. | |-- models
  89. | `-- views
  90. | |-- helpers
  91. | `-- scripts
  92. | |-- error
  93. | | `-- error.phtml
  94. | `-- index
  95. | `-- index.phtml
  96. |-- library
  97. |-- public
  98. | `-- index.php
  99. `-- tests
  100. |-- application
  101. | `-- bootstrap.php
  102. |-- library
  103. | `-- bootstrap.php
  104. `-- phpunit.xml
  105. ]]></programlisting>
  106. <para>
  107. Wenn man an diesem Punkt, Zend Framework dem eigenen <constant>include_path</constant>
  108. nicht hunzugefügt hat, empfehlen wir Ihn entweder in das eigene
  109. <filename>library/</filename> Verzeichnis zu kopieren oder zu symlinken. In jedem Fall
  110. sollte man entweder das <filename>library/Zend/</filename> Verzeichnis der Zend
  111. Framework Installation rekursiv in das <filename>library/</filename> Verzeichnis des
  112. Projekts kopieren oder symlinken. Auf unix-artigen Systemen würde das wie folgt
  113. aussehen:
  114. </para>
  115. <programlisting language="shell"><![CDATA[
  116. # Symlink:
  117. % cd library; ln -s path/to/ZendFramework/library/Zend .
  118. # Copy:
  119. % cd library; cp -r path/to/ZendFramework/library/Zend .
  120. ]]></programlisting>
  121. <para>
  122. Auf Windows Systemen ist es am einfachsten das vom Explorer zu tun.
  123. </para>
  124. <para>
  125. Jetzt da das Projekt erstellt wurde, sind die hauptsächlichen Artefakte die man
  126. verstehen sollte, die Bootstrap, die Konfiguration, die Action Controller und die Views.
  127. </para>
  128. </sect2>
  129. <sect2 id="learning.quickstart.create-project.bootstrap">
  130. <title>Die Bootstrap</title>
  131. <para>
  132. Die <classname>Bootstrap</classname> Klasse definiert welche Ressourcen und Komponenten
  133. zu initialisieren sind. Standardmäßig wird Zend Framework's <link
  134. linkend="zend.controller.front">Front Controller</link>initialisiert und er
  135. verwendet <filename>application/controllers/</filename> als Standardverzeichnis in dem
  136. nach Action Controllern nachgesehen wird (mehr davon später). Die Klasse sieht wie
  137. folgt aus:
  138. </para>
  139. <programlisting language="php"><![CDATA[
  140. // application/Bootstrap.php
  141. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  142. {
  143. }
  144. ]]></programlisting>
  145. <para>
  146. Wie man sieht ist nicht viel notwendig um zu beginnen.
  147. </para>
  148. </sect2>
  149. <sect2 id="learning.quickstart.create-project.configuration">
  150. <title>Konfiguration</title>
  151. <para>
  152. Wärend Zend Framework selbst konfigurationslos ist, ist es oft notwendig die eigene
  153. Anwendung zu konfigurieren. Die Standardkonfiguration wird in
  154. <filename>application/configs/application.ini</filename> platziert und enthält einige
  155. grundsätzliche Direktiven für die Einstellung der PHP Umgebung (zum Beispiel ein- und
  156. ausschalten der Fehlermeldungen), zeigt den Pfad zur eigenen Bootstrap Klasse (wie auch
  157. dessen Klassenname), und den Pfad zu den eigenen Action Controllern. Das sieht wie folgt
  158. aus:
  159. </para>
  160. <programlisting language="ini"><![CDATA[
  161. ; application/configs/application.ini
  162. [production]
  163. phpSettings.display_startup_errors = 0
  164. phpSettings.display_errors = 0
  165. includePaths.library = APPLICATION_PATH "/../library"
  166. bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
  167. bootstrap.class = "Bootstrap"
  168. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
  169. [staging : production]
  170. [testing : production]
  171. phpSettings.display_startup_errors = 1
  172. phpSettings.display_errors = 1
  173. [development : production]
  174. phpSettings.display_startup_errors = 1
  175. phpSettings.display_errors = 1
  176. ]]></programlisting>
  177. <para>
  178. Verschiedene Dinge sollten über diese Datei gesagt werden. Erstens kann man, wenn
  179. INI-artige Konfigurationen verwendet werden, direkt auf Konstanten referenzieren und Sie
  180. erweitern; <constant>APPLICATION_PATH</constant> selbst ist eine Konstante. Zusätzlich
  181. ist zu beachten das es verschiedene definierte Sektionen gibt: production, staging,
  182. testing, und development. Die letzten drei verweisen auf Einstellungen der
  183. "production" Umgebung. Das ist ein nützlicher Weg die Konfiguration zu organisieren und
  184. stellt sicher das die richtigen Einstellungen in jeder Stufe der Anwendungsentwicklung
  185. vorhanden sind.
  186. </para>
  187. </sect2>
  188. <sect2 id="learning.quickstart.create-project.action-controllers">
  189. <title>Action Controller</title>
  190. <para>
  191. Die <emphasis>Action Controller</emphasis> der Anwendung enthalten den Workflow der
  192. Anwendung und mappen eigene Anfragen auf die richtigen Modelle und Views.
  193. </para>
  194. <para>
  195. Ein Action Controller sollte ein oder mehrere Methoden haben die auf "Action" enden;
  196. diese Methoden können über das Web abgefragt werden. Standardmäßig folgen Zend Framework
  197. URL's dem Schema <constant>/controller/action</constant> wobei "controller" auf den
  198. Namen des Action Controllers verweist (ohne den "Controller" Suffix) und "action" auf
  199. eine Action Methode verweist (ohne den "Action" Suffix).
  200. </para>
  201. <para>
  202. Typischerweise benötigt man immer einen <classname>IndexController</classname>, der ein
  203. Fallback Controller ist und auch als Homepage der Site arbeitet, und einen
  204. <classname>ErrorController</classname> der verwendet wird um Dinge wie HTTP 404 Fehler
  205. zu zeigen (wenn der Controller oder die Action nicht gefunden wird) und HTTP 500 Fehler
  206. (Anwendungsfehler).
  207. </para>
  208. <para>
  209. Der standardmäßige <classname>IndexController</classname> ist wie folgt:
  210. </para>
  211. <programlisting language="php"><![CDATA[
  212. // application/controllers/IndexController.php
  213. class IndexController extends Zend_Controller_Action
  214. {
  215. public function init()
  216. {
  217. /* Den Action Controller hier initialisieren */
  218. }
  219. public function indexAction()
  220. {
  221. // Action Body
  222. }
  223. }
  224. ]]></programlisting>
  225. <para>
  226. Und der standardmäßige <classname>ErrorController</classname> ist wie folgt:
  227. </para>
  228. <programlisting language="php"><![CDATA[
  229. // application/controllers/ErrorController.php
  230. class ErrorController extends Zend_Controller_Action
  231. {
  232. public function errorAction()
  233. {
  234. $errors = $this->_getParam('error_handler');
  235. switch ($errors->type) {
  236. case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
  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>