Zend_Controller-ActionHelpers-Json.xml 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 16016 -->
  3. <!-- Reviewed: no -->
  4. <sect3 id="zend.controller.actionhelpers.json">
  5. <title>JSON</title>
  6. <para>
  7. <acronym>JSON</acronym> Antworten sind die Antworten der Wahl wenn mit
  8. <acronym>AJAX</acronym> Anfragen gearbeitet wird die Dataset Antworten erwarten;
  9. <acronym>JSON</acronym> kann sofort auf Seite des Clienten geparst werden, was zu
  10. schneller Ausführung führt.
  11. </para>
  12. <para>
  13. Der <acronym>JSON</acronym> Action Helfer macht verschiedene Dinge:
  14. </para>
  15. <itemizedlist>
  16. <listitem><para>
  17. Layouts auschalten wenn sie aktuell aktiviert sind.
  18. </para></listitem>
  19. <listitem>
  20. <para>
  21. Optional ein Array von Optionen als zweites Argument an
  22. <methodname>Zend_Json::encode()</methodname> übergeben. Dieses Array von Optionen
  23. erlaubt es Layouts und Kodierungen einzuschalten indem <code>Zend_Json_Expr</code>
  24. verwendet wird.
  25. </para>
  26. <programlisting language="php"><![CDATA[
  27. $this->_helper->json($data, array('enableJsonExprFinder' => true));
  28. ]]></programlisting>
  29. </listitem>
  30. <listitem><para>
  31. Den ViewRenderer ausschalten wenn er aktiviert ist.
  32. </para></listitem>
  33. <listitem><para>
  34. Den 'Content-Type' Antwort Header auf '<filename>application/json</filename>'
  35. setzen.
  36. </para></listitem>
  37. <listitem><para>
  38. Standardmäßig, die Antwort sofort zurückgeben, ohne darauf zu warten das die Aktion
  39. die Ausführung beendet.
  40. </para></listitem>
  41. </itemizedlist>
  42. <para>
  43. Die Verwendung ist einfach: Entweder als Methode des Helfer Brokers aufrufen, oder eine der
  44. Methoden <methodname>encodeJson()</methodname> oder <methodname>sendJson()</methodname>
  45. aufrufen:
  46. </para>
  47. <programlisting language="php"><![CDATA[
  48. class FooController extends Zend_Controller_Action
  49. {
  50. public function barAction()
  51. {
  52. // einige Berechnungen durchführen...
  53. // Die JSON Antwort senden:
  54. $this->_helper->json($data);
  55. // oder...
  56. $this->_helper->json->sendJson($data);
  57. // oder das JSON empfangen:
  58. $json = $this->_helper->json->encodeJson($data);
  59. }
  60. }
  61. ]]></programlisting>
  62. <note>
  63. <title>Layouts behalten</title>
  64. <para>
  65. Wenn man ein separates Layout für <acronym>JSON</acronym> Antworten hat --
  66. möglicherweise um die <acronym>JSON</acronym> Antworten in einer Art Kontext zu wrappen
  67. -- akzeptiert jede Methode im <acronym>JSON</acronym> Helfer ein zweites, optionales
  68. Argument: Ein Flag um Layouts zu aktivieren oder deaktivieren. Die Übergabe eines
  69. boolschen <constant>TRUE</constant> Wertes hält Layouts aktiviert:
  70. </para>
  71. <programlisting language="php"><![CDATA[
  72. $this->_helper->json($data, true);
  73. ]]></programlisting>
  74. <para>
  75. Optional kann ein Array als zweiter Parameter übergeben werden. Dieses Array kann eine
  76. Vielzahl von Optionen enthalten, inklusive der <code>keepLayouts</code> Option:
  77. </para>
  78. <programlisting language="php"><![CDATA[
  79. $this->_helper->json($data, array('keepLayouts' => true);
  80. ]]></programlisting>
  81. </note>
  82. <note>
  83. <title>Kodierung einschalten durch Verwendung von Zend_Json_Expr</title>
  84. <para>
  85. <methodname>Zend_Json::encode()</methodname> erlaubt die Kodierung von nativen
  86. <acronym>JSON</acronym> Ausdrücken indem <classname>Zend_Json_Expr</classname>
  87. Objekte verwendet werden. Diese Option ist standardmäßig ausgeschaltet. Um diese Option
  88. einzuschalten muß ein boolscher <constant>TRUE</constant> Wert an die
  89. <code>enableJsonExprFinder</code> Option übergeben werden:
  90. </para>
  91. <programlisting language="php"><![CDATA[
  92. $this->_helper->json($data, array('enableJsonExprFinder' => true);
  93. ]]></programlisting>
  94. <para>
  95. Wenn man das durchführen will, <emphasis>muss</emphasis> man ein Array als zweite
  96. Option übergeben. Das erlaubt es auch andere Optionen, wie zum Beispiel die
  97. <code>keepLayouts</code> Option, zu kombinieren. Alle diese Optionen werden dann
  98. an <methodname>Zend_Json::encode()</methodname> übergeben.
  99. </para>
  100. <programlisting language="php"><![CDATA[
  101. $this->_helper->json($data, array(
  102. 'enableJsonExprFinder' => true,
  103. 'keepLayouts' => true,
  104. ));
  105. ]]></programlisting>
  106. </note>
  107. </sect3>
  108. <!--
  109. vim:se ts=4 sw=4 et:
  110. -->