Zend_Controller-ActionHelpers-ActionStack.xml 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <sect3 id="zend.controller.actionhelpers.actionstack">
  2. <title>ActionStack</title>
  3. <para>
  4. Помощник <code>ActionStack</code> позволяет помещать в стек запросы к
  5. плагину
  6. <link linkend="zend.controller.plugins.standard.actionstack">ActionStack</link>
  7. фронт-контроллера, помогая эффективно создавать очереди действий,
  8. выполняемых в течение запроса. Этот помощник позволяет добавлять
  9. действия посредством установки новых объектов запросов или наборов
  10. действие/контроллер/модуль.
  11. </para>
  12. <note>
  13. <title>Вызов помощника ActionStack инициализирует плагин ActionStack</title>
  14. <para>
  15. При вызове помощника <code>ActionStack</code> неявным образом
  16. регистрируется плагин <code>ActionStack</code>. Это значит, что нет
  17. необходимости явным образом регистрировать плагин
  18. <code>ActionStack</code> для того, чтобы использовать его
  19. функционал.
  20. </para>
  21. </note>
  22. <example id="zend.controller.actionhelpers.actionstack.simple">
  23. <title>Добавление задачи с использованием имен действия, контроллера и модуля</title>
  24. <para>
  25. Зачастую наиболее простым способом будет указание действия,
  26. контроллера и модуля (и необязательных параметров запроса), почти
  27. так же, как если бы вы вызывали
  28. <code>Zend_Controller_Action::_forward()</code>:
  29. </para>
  30. <programlisting role="php"><![CDATA[
  31. class FooController extends Zend_Controller_Action
  32. {
  33. public function barAction()
  34. {
  35. // Добавление двух действий в стек
  36. // Добавление вызова к /foo/baz/bar/baz
  37. // (FooController::bazAction() с переменной запроса bar == baz)
  38. $this->_helper->actionStack('baz',
  39. 'foo',
  40. 'default',
  41. array('bar' => 'baz'));
  42. // Добавление вызова к /bar/bat
  43. // (BarController::batAction())
  44. $this->_helper->actionStack('bat', 'bar');
  45. }
  46. }
  47. ]]>
  48. </programlisting>
  49. </example>
  50. <example id="zend.controller.actionhelpers.actionstack.simple2">
  51. <title>Добавление задачи с использованием объекта запроса</title>
  52. <para>
  53. Иногда имеет смысл использовать объект запроса, что более
  54. соответствует духу ООП. Объект запроса тоже можно передавать
  55. помощнику <code>ActionStack</code>.
  56. </para>
  57. <programlisting role="php"><![CDATA[
  58. class FooController extends Zend_Controller_Action
  59. {
  60. public function barAction()
  61. {
  62. // Добавление двух действий в стек
  63. // Добавление вызова к /foo/baz/bar/baz
  64. // (FooController::bazAction() с переменной запроса bar == baz)
  65. $request = clone $this->getRequest();
  66. // Не устанавливайте контроллер и модуль;
  67. // используются текущие значения
  68. $request->setActionName('baz')
  69. ->setParams(array('bar' => 'baz'));
  70. $this->_helper->actionStack($request);
  71. // Add call to /bar/bat
  72. // (BarController::batAction())
  73. $request = clone $this->getRequest();
  74. // Не устанавливайте модуль;
  75. // используется текущиее значение
  76. $request->setActionName('bat')
  77. ->setControllerName('bar');
  78. $this->_helper->actionStack($request);
  79. }
  80. }
  81. ]]>
  82. </programlisting>
  83. </example>
  84. </sect3>
  85. <!--
  86. vim:se ts=4 sw=4 et:
  87. -->