Zend_View-Controllers.xml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 14978 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.view.controllers">
  5. <title>Controller Skripte</title>
  6. <para>
  7. Der Controller ist der Ort, wo du <classname>Zend_View</classname> instanziieren und konfigurieren kannst. Du
  8. übergibst dann die Variablen an den View und teilst ihm mit, welches bestimmte Skript für
  9. die Ausgabe benutzt werden soll.
  10. </para>
  11. <sect2 id="zend.view.controllers.assign">
  12. <title>Variablen übergeben</title>
  13. <para>
  14. Dein Controller Skript sollte notwendige Variablen an den View übergeben, bevor es die
  15. Kontrolle an das View Skript übergibt. Normalerweise kannst du eine Variable nach der
  16. anderen übergeben und an den bezeichneten Eigenschaften der View Instanz zuordnen.
  17. </para>
  18. <programlisting role="php"><![CDATA[
  19. $view = new Zend_View();
  20. $view->a = "Hay";
  21. $view->b = "Bee";
  22. $view->c = "Sea";
  23. ]]>
  24. </programlisting>
  25. <para>
  26. Allerdings kann dies mühsam sein, wenn du bereits alle Werte gesammelt hast, um sie
  27. einem Array oder einem Objekt zuzuordnen.
  28. </para>
  29. <para>
  30. Mit der assign() Methode kannst Du auch ein Array oder ein Objekt auf einmal übergeben.
  31. Das folgende Beispiel hat den selben Effekt wie die obigen einzelnen Übergaben.
  32. </para>
  33. <programlisting role="php"><![CDATA[
  34. $view = new Zend_View();
  35. // übergebe ein Array mit Schlüssel-Wert Paaren,
  36. // wo der Schlüssel der Variablenname und der
  37. // Wert die übergebene Variable ist
  38. $array = array(
  39. 'a' => "Hay",
  40. 'b' => "Bee",
  41. 'c' => "Sea",
  42. );
  43. $view->assign($array);
  44. // mache das selbe mit den öffentlichen Eigenschaften
  45. // eines Objektes; beachte wir wir das Objekt beim
  46. // Übergeben in ein Array umwandeln
  47. $obj = new StdClass;
  48. $obj->a = "Hay";
  49. $obj->b = "Bee";
  50. $obj->c = "Sea";
  51. $view->assign((array) $obj);
  52. ]]>
  53. </programlisting>
  54. <para>
  55. Alternativ kannst du die assign() Methode auch benutzen, um nacheinander einen
  56. Variablennamen und den Wert der Variable zu übergeben.
  57. </para>
  58. <programlisting role="php"><![CDATA[
  59. $view = new Zend_View();
  60. $view->assign('a', "Hay");
  61. $view->assign('b', "Bee");
  62. $view->assign('c', "Sea");
  63. ]]>
  64. </programlisting>
  65. </sect2>
  66. <sect2 id="zend.view.controllers.render">
  67. <title>Verarbeitung eines View Skripts</title>
  68. <para>
  69. Sobald du alle notwendigen Variablen übergeben hast, sollte der Controller dem
  70. <classname>Zend_View</classname> mitteilen, ein bestimmtes View Skript zu verarbeiten. Dies funktioniert über
  71. die render() Methode. Beachte, dass diese Methode die verarbeitete Ausgabe zurück- aber
  72. nicht ausgibt, so dass du die Ausgabe selber zur passenden Zeit per echo() oder print()
  73. ausgeben musst.
  74. </para>
  75. <programlisting role="php"><![CDATA[
  76. $view = new Zend_View();
  77. $view->a = "Hay";
  78. $view->b = "Bee";
  79. $view->c = "Sea";
  80. echo $view->render('someView.php');
  81. ]]>
  82. </programlisting>
  83. </sect2>
  84. <sect2 id="zend.view.controllers.script-paths">
  85. <title>Pfade für View Skripte</title>
  86. <para>
  87. Standardmäßig erwartet <classname>Zend_View</classname>, dass deine View Skripte im selben Verzeichnis wie
  88. das Conntroller Skript liegen. Wenn dein Controller Skript zum Beispiel im Pfad
  89. "/path/to/app/controllers" liegt und es $view->render('someView.php') aufruft, wird
  90. <classname>Zend_View</classname> nach der Datei "/path/to/app/controllers/someView.php" schauen.
  91. </para>
  92. <para>
  93. Es ist durchaus wahrscheinlich, dass deine View Skripte woanders liegen. Verwende
  94. die setScriptPath() Methode, um <classname>Zend_View</classname> mitzuteilen, wo es nach View Skripten
  95. schauen soll.
  96. </para>
  97. <programlisting role="php"><![CDATA[
  98. $view = new Zend_View();
  99. $view->setScriptPath('/path/to/app/views');
  100. ]]>
  101. </programlisting>
  102. <para>
  103. Wenn du nun $view->render('someView.php') aufrufst, wird es nach der Datei
  104. "/path/to/app/views/someView.php" schauen.
  105. </para>
  106. <para>
  107. Durch Verwendung der addScriptPath() Methode können die Pfade "gestapelt" werden. Wenn
  108. du Pfade zu diesem Stapelspeicher hinzufügst, wird <classname>Zend_View</classname> im zuletzt
  109. hinzugefügten Pfad nach dem angeforderten View Skript schauen. Dies erlaubt dir,
  110. Standard Views mit spezialisierten Views zu überschreiben, so dass Du "Themen"
  111. oder "Skins" für einige Views erstellen kannst, während du andere bestehen lässt.
  112. </para>
  113. <programlisting role="php"><![CDATA[
  114. $view = new Zend_View();
  115. $view->addScriptPath('/path/to/app/views');
  116. $view->addScriptPath('/path/to/custom/');
  117. // wenn du nun $view->render('booklist.php') aufrufst, wird
  118. // Zend_View zuerst nach der Datei "/path/to/custom/booklist.php",
  119. // dann nach "/path/to/app/views/booklist.php" und zuguterletzt
  120. // im aktuellen Pfad nach der Datei "booklist.php" schauen
  121. ]]>
  122. </programlisting>
  123. <note>
  124. <title>Benutze nie Eingaben des Benutzers um den Skriptpfad zu setzen</title>
  125. <para>
  126. <classname>Zend_View</classname> verwendet Skriptpfade um Viewskripte zu eruieren und Sie darzustellen.
  127. Deshalb sollten diese Verzeichnisse im Vorhinein bekannt sein, und unter der eigenen Kontrolle.
  128. <emphasis>Niemals</emphasis> sollten Pfade von Viewskripten basierend auf Benutzereingaben
  129. gesetzt werden, da diese dazu führen können das man sich potentiell gegen Local File Inclusion
  130. Angriffe öffnet wenn der spezifizierte Pfad den Übergang in das Elternverzeichnis enthält.
  131. Die folgende Eingabe könnte zu Beispiel so einen Fall verursachen:
  132. </para>
  133. <programlisting role="php"><![CDATA[
  134. // $_GET['foo'] == '../../../etc'
  135. $view->addScriptPath($_GET['foo']);
  136. $view->render('passwd');
  137. ]]></programlisting>
  138. <para>
  139. Obwohl dieses Beispiel erfunden ist, zeigt es doch sehr klar das potentielle Problem. Wenn man
  140. Benutzereingaben vertrauen <emphasis>muß</emphasis> um den eigenen Skriptpfad zu setzen, muß
  141. man die Eingabe entsprechend Filtern und prüfen um sicherzustellen das Sie in dem Pfaden
  142. existiert die von der eigenen Anwendung kontrolliert werden.
  143. </para>
  144. </note>
  145. </sect2>
  146. </sect1>
  147. <!--
  148. vim:se ts=4 sw=4 et:
  149. -->