Zend_Controller-QuickStart.xml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <sect1 id="zend.controller.quickstart">
  2. <title>Zend_Controller gyorstalpaló</title>
  3. <sect2 id="zend.controller.quickstart.introduction">
  4. <title>Bevezetés</title>
  5. <para>
  6. A
  7. <code>Zend_Controller</code>
  8. a Zend Framework MNV rendszerének lelke. Az MNV, azaz
  9. <ulink url="http://hu.wikipedia.org/wiki/Modell-nézet-vezérlő">Modell-Nézet-Vezérlő</ulink>
  10. (Model-View-Controller, MVC), egy tervezési minta, melynek célja az alkalmazási logika elválasztása a megjelenítési logikától. A
  11. <code>Zend_Controller_Front</code>
  12. egy
  13. <ulink url="http://www.martinfowler.com/eaaCatalog/frontController.html">Elülső Vezérlő</ulink>
  14. (Front Controller) mintát valósít meg, melyben az elülső vezérlő minden kérést elfog, és a kért URL alapján kézbesít az önálló Műveletvezérlőknek (Action Controllers).
  15. </para>
  16. <para>
  17. A
  18. <code>Zend_Controller</code>
  19. rendszer építésekor mindvégig szem elött tartottuk a kiterjeszthetőséget, történjék az a meglévő osztályok származtatásával, olyan új osztályok írásával, melyek megvalósítják az osztályok vezérlő családjának alapját képező különféle felületeket és elvont osztályokat, vagy bővítmények, illetve művelet segédek írásával, növelendő vagy befolyásolandó a rendszer funkcionalitását.
  20. </para>
  21. </sect2>
  22. <sect2 id="zend.controller.quickstart.go">
  23. <title>Gyorstalpaló</title>
  24. <para>
  25. Ha bővebb információra van szükséged, lásd a következő fejezeteket. Ha csak gyorsan meg akarsz lenni és indulni, olvass tovább.
  26. </para>
  27. <sect3 id="zend.controller.quickstart.go.directory">
  28. <title>Az állományaid elrendezése</title>
  29. <para>
  30. Az első lépés, hogy elrendezd az állományaid. A jellemző elrendezés a következő:
  31. </para>
  32. <programlisting role="php">
  33. <![CDATA[application/
  34. controllers/
  35. IndexController.php
  36. models/
  37. views/
  38. scripts/
  39. index/
  40. index.phtml
  41. helpers/
  42. filters/
  43. html/
  44. .htaccess
  45. index.php]]>
  46. </programlisting>
  47. </sect3>
  48. <sect3 id="zend.controller.quickstart.go.docroot">
  49. <title>A gyökérkönyvtárad beállítása</title>
  50. <para>
  51. A webkiszolgálódban állítsd a gyökérkönyvtárad a fenti elrendezés
  52. <code>html/</code>
  53. könyvtárára.
  54. </para>
  55. </sect3>
  56. <sect3 id="zend.controller.quickstart.go.rewrite">
  57. <title>Készítsd el az átírási szabályaid</title>
  58. <para>
  59. Szerkeszd a fenti <code>html/.htaccess</code> állományt, hogy a következőképpen fessen:
  60. </para>
  61. <programlisting role="php">
  62. <![CDATA[RewriteEngine on
  63. RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php]]>
  64. </programlisting>
  65. <para>
  66. A fenti szabályok minden nem-erőforrás (képek, stíluslapok) kérést az elülső vezérlőhöz fog irányítani. Ha vannak más kiterjesztések, amiket el akarsz zárni az elülső vezérlőtől (PDF-ek, szöveges állományok stb.), add a kiterjesztésüket a választóhoz, vagy készítsd el a saját átírási szabályaidat.
  67. </para>
  68. <note>
  69. <para>
  70. A fenti átírási szabályok Apache-ra vonatkoznak; más webkiszolgálókra vonatkozó átírási szabályokra az
  71. <link linkend="zend.controller.router.introduction">útválasztó leírásában</link>
  72. találsz példát.
  73. </para>
  74. </note>
  75. </sect3>
  76. <sect3 id="zend.controller.quickstart.go.bootstrap">
  77. <title>Készítsd el a rendszertöltő állományod</title>
  78. <para>
  79. A rendszertöltő állomány az az oldal, amin az összes kérés át van vezetve – a
  80. <code>html/index.php</code>,
  81. ebben az esetben. Nyisd meg a
  82. <code>html/index.php</code>
  83. -t az általad választott szerkesztőben, és add hozzá a következőt:
  84. </para>
  85. <programlisting role="php">
  86. <![CDATA[<?php
  87. require_once 'Zend/Controller/Front.php';
  88. Zend_Controller_Front::run('/eléresi/út/a/vezérlőkhöz');]]>
  89. </programlisting>
  90. <para>
  91. Ez példányosítani fogja az elülső vezérlőt, ami majd elirányítja a kéréseket a műveletvezérlőkhöz.
  92. </para>
  93. </sect3>
  94. <sect3 id="zend.controller.quickstart.go.controller">
  95. <title>Készítsd el az alapértelmezett műveletvezérlőd</title>
  96. <para>
  97. Mielőtt a műveletvezérlőket tárgyalnánk, először meg kell értened, hogyan vannak a kérések irányítva a Zend Frameworkben. Alapból egy URL elérési út első része egy vezérlőre, a második pedig egy műveletre van leképezve. Például a
  98. <code>http://framework.zend.com/roadmap/components</code>
  99. URL esetén az elérési út a
  100. <code>/roadmap/components</code>,
  101. ami a
  102. <code>roadmap</code>
  103. vezérlőre és a
  104. <code>components</code>
  105. műveletre lesz leképezve. Ha nincs művelet megadva, az
  106. <code>index</code>
  107. művelet lesz feltételezve, ha nincs vezérlő megadva, akkor pedig az
  108. <code>index</code>
  109. vezérlő (követve az Apache egyezményt, ami egy
  110. <code>DirectoryIndexre</code>
  111. mutat automatikusan).
  112. </para>
  113. <para>
  114. Ezután a
  115. <code>Zend_Controller</code>
  116. kézbesítője veszi a vezérlő nevet és egy leképezi egy osztályra. Alapból nagykezdőbetűzi a vezérlő nevét és hozzáfűzi a
  117. <code>Controller</code>
  118. szót. Ilymódon, a fenti példánkban a
  119. <code>roadmap</code>
  120. vezérlő a
  121. <code>RoadmapController</code>
  122. osztályra lesz leképezve.
  123. </para>
  124. <para>
  125. Hasonlóan, a művelet név a vezérlő osztály egy tagfüggvényére lesz leképezve. Alapból a név kisbetűs, és az
  126. <code>Action</code>
  127. szó van hozzáfűzve. Tehát, a fenti példánkban a
  128. <code>components</code>
  129. műveletből
  130. <code>componentsAction</code>
  131. lesz, és végül a tagfüggvény neve
  132. <code>RoadmapController::componentsAction()</code>.
  133. </para>
  134. <para>
  135. Továbblépve tehát, csináljunk egy alapértelmezett műveletvezérlőt és művelet tagfüggvényt. Ahogy azt korábban megjegyeztük, az alapértelmezett vezérlő és művelet neve is
  136. <code>index</code>.
  137. Nyisd meg az
  138. <code>application/controllers/IndexController.php</code>
  139. állományt, és írd a következőt:
  140. </para>
  141. <programlisting role="php">
  142. <![CDATA[<?php
  143. /** Zend_Controller_Action */
  144. require_once 'Zend/Controller/Action.php';
  145. class IndexController extends Zend_Controller_Action
  146. {
  147. public function indexAction()
  148. {
  149. }
  150. }]]>
  151. </programlisting>
  152. <para>
  153. Alapból a
  154. <link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link>
  155. műveletsegéd engedélyezve van. Ez azt jelenti, hogy egyszerűen megadva egy művelet tagfüggvényt és egy vonatkozó nézet szkriptet, a tartalmad azonnal megjelenik. Alapból a
  156. <code>Zend_View</code>
  157. lesz az MNV Nézet rétegeként használva. A
  158. <code>ViewRenderer</code>
  159. varázsol kicsit, és a vezérlő (pl.
  160. <code>index</code>)
  161. és az aktuális művelet (pl.
  162. <code>index</code>)
  163. nevét használja, hogy megállípítsa melyik sablont szolgálja ki. Alapbeállítás szerint a sablonok a
  164. <code>.phtml</code>
  165. kiterjesztésre végződnek, tehát ezek szerint a fenti példában az
  166. <code>index/index.phtml</code>
  167. sablon lesz megjelenítve. Ezenfelül a
  168. <code>ViewRenderer</code>
  169. magától feltételezi, hogy a vezérlő könyvtárral egy szinten lévő
  170. <code>views</code>
  171. könyvtár lesz az alap nézet könyvtár, és hogy a nézet szkriptek a
  172. <code>views/scripts</code>
  173. alkönyvtárban helyezkednek el. Ebből következően a megjelenített sablon az
  174. <code>application/views/scripts/index/index.phtml</code>.
  175. </para>
  176. </sect3>
  177. <sect3 id="zend.controller.quickstart.go.view">
  178. <title>Készítsd el a nézet szkripted</title>
  179. <para>
  180. Ahogy azt az
  181. <link linkend="zend.controller.quickstart.go.controller">előző részben</link>
  182. említettük, a nézet szkripteket az
  183. <code>application/views/scripts/</code>-ben
  184. találjuk; a nézet szkript az alapbeállítású vezérlőhöz és művelethez az
  185. <code>application/views/scripts/index/index.phtml</code>.
  186. Hozd létre ezt az állományt és írj bele némi HTML-t:
  187. </para>
  188. <programlisting role="php"><![CDATA[<?xml version="1.0" encoding="utf-8"?>
  189. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  190. <html
  191. lang="hu"
  192. xml:lang="hu"
  193. xmlns="http://www.w3.org/1999/xhtml"
  194. </html>
  195. <head>
  196. <meta
  197. content="text/html; charset=utf-8"
  198. http-equiv="Content-Type"
  199. />
  200. <title>Első Zend Framework alkalmazásom</title>
  201. </head>
  202. <body>
  203. <h1>Helló, világ!</h1>
  204. </body>
  205. </html>]]>
  206. </programlisting>
  207. </sect3>
  208. <sect3 id="zend.controller.quickstart.go.errorhandler">
  209. <title>Készítsd el a hibakezelő vezérlőd</title>
  210. <para>
  211. Alapbeállítás szerint a
  212. <link linkend="zend.controller.plugins.standard.errorhandler">hibakezelő bővítmény</link>
  213. be van jegyezve. Ez az bővítmény azt várja, hogy létezik egy vezérlő, ami kezeli a hibákat. Feltételez egy
  214. <code>ErrorControllert</code>
  215. az alapértelmezett modulban, egy
  216. <code>errorAction()</code>
  217. tagfüggvénnyel:
  218. </para>
  219. <programlisting role="php">
  220. <![CDATA[<?php
  221. /** Zend_Controller_Action */
  222. require_once 'Zend/Controller/Action.php';
  223. class ErrorController extends Zend_Controller_Action
  224. {
  225. public function errorAction()
  226. {
  227. }
  228. }]]>
  229. </programlisting>
  230. <para>
  231. Feltételezve a már tárgyalt könyvtárelrendezést, ez az állomány az
  232. <code>application/controllers/ErrorController.php</code>
  233. helyre kerül. Szükséged lesz egy nézet szkriptre is az
  234. <code>application/views/scripts/error/error.phtml</code>-ben;
  235. a tartalomra egy lehetséges példa:
  236. </para>
  237. <programlisting role="php"><![CDATA[<?xml version="1.0" encoding="utf-8"?>
  238. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  239. <html
  240. lang="hu"
  241. xml:lang="hu"
  242. xmlns="http://www.w3.org/1999/xhtml"
  243. </html>
  244. <head>
  245. <meta
  246. content="text/html; charset=utf-8"
  247. http-equiv="Content-Type"
  248. />
  249. <title>Hiba</title>
  250. </head>
  251. <body>
  252. <h1>Hiba merült fel/h1>
  253. <p>Hiba merült fel; kérjük próbáld újra később.</p>
  254. </body>
  255. </html>]]>
  256. </programlisting>
  257. </sect3>
  258. <sect3 id="zend.controller.quickstart.go.finish">
  259. <title>Nézd meg az oldalt!</title>
  260. <para>
  261. Első vezérlőddel és nézeteddel felszerelkezve most beizzíthatod a böngésződ és az oldalra navigálhatsz. Feltételezve, hogy a tartományneved
  262. <code>valami.hu</code>,
  263. a következő URL-ek bármelyike behozza a most elkészült oldalt:
  264. </para>
  265. <itemizedlist>
  266. <listitem><para><code>http://valami.hu/</code></para></listitem>
  267. <listitem><para><code>http://valami.hu/index</code></para></listitem>
  268. <listitem><para><code>http://valami.hu/index/index</code></para></listitem>
  269. </itemizedlist>
  270. <para>
  271. Mostmár nekiláthatsz új vezérlők és műveletek készítésének. Gratulálunk!
  272. </para>
  273. </sect3>
  274. </sect2>
  275. </sect1>
  276. <!--
  277. vim:se ts=4 sw=4 et:
  278. -->