Zend_Controller-ActionHelpers-Json.xml 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <sect3 id="zend.controller.actionhelpers.json">
  4. <title>JSON</title>
  5. <para>
  6. JSON быстро становится предпочтительным форматом для использования с
  7. AJAX-запросами, которые подразумевают ответы с данными. Синтаксический
  8. разбор JSON может производиться сразу на стороне клиента, что приводит
  9. к большей производительности.
  10. </para>
  11. <para>
  12. Помощник действий JSON выполняет несколько функций:
  13. </para>
  14. <itemizedlist>
  15. <listitem><para>
  16. Отключает макеты, если они включены.
  17. </para></listitem>
  18. <listitem>
  19. <para>
  20. Опционально в качестве второго аргумента можно передавать
  21. массив опций для <code>Zend_Json::encode()</code>.
  22. Этот масив опций позволяет включать макеты и кодирование
  23. с использованием <classname>Zend_Json_Expr</classname>.
  24. </para>
  25. <programlisting language="php"><![CDATA[
  26. $this->_helper->json($data, array('enableJsonExprFinder' => true));
  27. ]]></programlisting>
  28. </listitem>
  29. <listitem><para>
  30. Отключает ViewRenderer, если он включен.
  31. </para></listitem>
  32. <listitem><para>
  33. Устанавливает заголовок ответа 'Content-Type' со значением
  34. 'application/json'.
  35. </para></listitem>
  36. <listitem><para>
  37. По умолчанию сразу возвращает ответ, не дожидаясь завершения
  38. выполнения действия.
  39. </para></listitem>
  40. </itemizedlist>
  41. <para>
  42. Использование помощника довольно простое - вызывайте его как метод
  43. брокера помощников или вызывайте один из его методов
  44. <code>encodeJson()</code> или
  45. <code>sendJson()</code>:
  46. </para>
  47. <programlisting language="php"><![CDATA[
  48. class FooController extends Zend_Controller_Action
  49. {
  50. public function barAction()
  51. {
  52. // произведение некоторых действий...
  53. // Отправка ответа JSON:
  54. $this->_helper->json($data);
  55. // или...
  56. $this->_helper->json->sendJson($data);
  57. // либо получение данных в формате json:
  58. $json = $this->_helper->json->encodeJson($data);
  59. }
  60. }
  61. ]]>
  62. </programlisting>
  63. <note>
  64. <title>Использование макетов</title>
  65. <para>
  66. Если вы имеете отдельный макет для ответов JSON (возможно, для того,
  67. чтобы включить ответ JSON в некоторый контекст), то на этот случай
  68. все методы в помощнике JSON принимает второй, опциональный
  69. аргумент - флаг для включения/отключения макетов. Передача булевого
  70. значения <constant>TRUE</constant> позволит оставить макеты включенными:
  71. </para>
  72. <programlisting language="php"><![CDATA[
  73. $this->_helper->json($data, true);
  74. ]]></programlisting>
  75. <para>
  76. Вы можете также передавать массив через второй параметр.
  77. Этот массив может содержать набор опций, включая опцию
  78. <code>keepLayouts</code>:
  79. </para>
  80. <programlisting language="php"><![CDATA[
  81. $this->_helper->json($data, array('keepLayouts' => true);
  82. ]]></programlisting>
  83. </note>
  84. <note>
  85. <title>Включение кодирования через Zend_Json_Expr</title>
  86. <para>
  87. <classname>Zend_Json::encode()</classname> позволяет закодировывать
  88. "родные" выражения JSON с использованием объектов
  89. <code>Zend_Json_Expr</code>. Эта опция по умолчанию отключена.
  90. Для того, чтобы включить эту опцию, передавайте
  91. булево значение <constant>TRUE</constant> через опцию
  92. <code>enableJsonExprFinder</code>:
  93. </para>
  94. <programlisting language="php"><![CDATA[
  95. $this->_helper->json($data, array('enableJsonExprFinder' => true);
  96. ]]></programlisting>
  97. <para>
  98. При использовании этой опции вы <emphasis>должны</emphasis>
  99. передавать массив в качестве второго параметра. Это также
  100. позволяет комбинировать опции друг с другом - например, с опцией
  101. <code>keepLayouts</code>. Все эти опции потом передаются
  102. <classname>Zend_Json::encode()</classname>.
  103. </para>
  104. <programlisting language="php"><![CDATA[
  105. $this->_helper->json($data, array(
  106. 'enableJsonExprFinder' => true,
  107. 'keepLayouts' => true,
  108. ));
  109. ]]></programlisting>
  110. </note>
  111. </sect3>
  112. <!--
  113. vim:se ts=4 sw=4 et:
  114. -->