Zend_Controller-ActionHelpers-Json.xml 4.8 KB

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