Zend_View-Scripts.xml 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <sect1 id="zend.view.scripts">
  2. <title>View Scripts</title>
  3. <para>
  4. Eenmaal je controller de variabelen heeft toegewezen en render()
  5. heeft opgeroepen zal Zend_View het gevraagde view script oproepen
  6. en het binnenin de Zend_View instantie uitvoeren. Daarom wijzen
  7. referenties naar $this in je view scripts eigenlijk naar de
  8. Zend_View instantie zelf.
  9. </para>
  10. <para>
  11. Variabelen die aan het view script werden toegewezen door de
  12. controller worden beschouwd als instantie-eigenschappen. Bijvoorbeeld,
  13. indien de controller een variabele 'iets' zou toewijzen, zou je
  14. ernaar verwijzen in je view script als $this->iets. (Dit laat je toe
  15. de variabelen die werden toegewezen te scheiden van de variabelen die
  16. intern zijn aan het script zelf.)
  17. </para>
  18. <para>
  19. Bij wijze van geheugenverfrisser vindt je hieronder het view script van
  20. de Zend_View inleiding:
  21. </para>
  22. <programlisting role="php"><![CDATA[<?php if ($this->books): ?>
  23. <!-- Een tabel van enige boeken. -->
  24. <table>
  25. <tr>
  26. <th>Auteur</th>
  27. <th>Titel</th>
  28. </tr>
  29. <?php foreach ($this->books as $key => $val): ?>
  30. <tr>
  31. <td><?php echo $this->escape($val['author']) ?></td>
  32. <td><?php echo $this->escape($val['title']) ?></td>
  33. </tr>
  34. <?php endforeach; ?>
  35. </table>
  36. <?php else: ?>
  37. <p>Er zijn geen boeken af te beelden.</p>
  38. <?php endif; ?>]]>
  39. </programlisting>
  40. <sect2 id="zend.view.scripts.escaping">
  41. <title>Escaping Output</title>
  42. <para>
  43. Eén van de meest belangrijke taken die in een view script
  44. moeten worden uitgevoerd is die welke verzekert dat output
  45. op een korrekte wijze wordt ge-escaped; dit helpt, onder andere,
  46. cross-site scripting aanvallen te voorkomen. Behalve als je een
  47. functie, methode of helper gebruilt die zelf het escapen voor
  48. rekening neemt, zou je altijd variabelen moeten escapen als je
  49. ze output.
  50. </para>
  51. <para>
  52. Zend_View komt met een methode escape() die veel van het escape
  53. werk voor je uitvoert.
  54. </para>
  55. <programlisting role="php"><![CDATA[<?php
  56. // slecht gebruik van het view-script:
  57. echo $this->variable;
  58. // goed gebruik van het view-script:
  59. echo $this->escape($this->variable);
  60. ?>]]>
  61. </programlisting>
  62. <para>
  63. Standaard gebruikt de escape() methode de PHP functie htmlspecialchars()
  64. om data te escapen. Afhangende van jouw environment zou het kunnen dat je
  65. zou willen dat het escapen op een andere manier wordt uitgevoerd. Gebruik
  66. de setEscape() methode op controller niveau om Zend_View te laten weten
  67. welke escape callback te gebruiken.
  68. </para>
  69. <programlisting role="php"><![CDATA[<?php
  70. // Maak een Zend_View instantie
  71. $view = new Zend_View();
  72. // vertel het htmlentities te gebruiken als escape callback
  73. $view->setEscape('htmlentities');
  74. // of vertel het een statische klassemethode te gebruiken als callback
  75. $view->setEscape(array('EenClass', 'methodeNaam'));
  76. // of zelfs een instantiemethode
  77. $obj = new EenClass();
  78. $view->setEscape(array($obj, 'methodeNaam'));
  79. // en geef dan je view weer
  80. echo $view->render(...);
  81. ?>]]>
  82. </programlisting>
  83. <para>
  84. De callback functie of methode zou de waarde die ge-escaped moet
  85. worden als eerste parameter moeten nemen en alle andere parameters
  86. moeten optioneel zijn.
  87. </para>
  88. </sect2>
  89. <sect2 id="zend.view.scripts.templates">
  90. <title>Template Systemen</title>
  91. <para>
  92. Alhoewel PHP zelf een machtig template systeem is vinden
  93. vele developpeurs dat het een tè machtig of complex systeem
  94. is voor template designers. Daarom kan het view script
  95. gebruikt worden om een ander template objekt te instantiëren
  96. en te manipuleren, zoals een PHPLIB-stijl template. Het
  97. view script voor dit soort aktiviteir zou er als volgt
  98. kunnen uitzien:
  99. </para>
  100. <programlisting role="php"><![CDATA[<?php
  101. include_once 'template.inc';
  102. $tpl = new Template();
  103. if ($this->books) {
  104. $tpl->setFile(array(
  105. "boeklijst" => "boeklijst.tpl",
  106. "elkboek" => "elkboek.tpl",
  107. ));
  108. foreach ($this->boeken as $key => $val) {
  109. $tpl->set_var('auteur', $this->escape($val['author']);
  110. $tpl->set_var('titel', $this->escape($val['title']);
  111. $tpl->parse("boeken", "elkboek", true);
  112. }
  113. $tpl->pparse("output", "boeklijst");
  114. } else {
  115. $tpl->setFile("geenboeken", "geenboeken.tpl")
  116. $tpl->pparse("output", "geenboeken");
  117. }
  118. ?>]]>
  119. </programlisting>
  120. <para>
  121. Dit zouden de template bestanden zijn:
  122. </para>
  123. <programlisting role="html"><![CDATA[
  124. <!-- boeklijst.tpl -->
  125. <table>
  126. <tr>
  127. <th>Auteur</th>
  128. <th>Titel</th>
  129. </tr>
  130. {boeken}
  131. </table>
  132. <!-- elkboek.tpl -->
  133. <tr>
  134. <td>{auteur}</td>
  135. <td>{titel}</td>
  136. </tr>
  137. <!-- geenboeken.tpl -->
  138. <p>Er zijn geen boeken af te beelden.</p>
  139. ]]>
  140. </programlisting>
  141. </sect2>
  142. </sect1>
  143. <!--
  144. vim:se ts=4 sw=4 et:
  145. -->