# ActionStack

Помощник `ActionStack` позволяет помещать в стек запросы к плагину ActionStack фронт-контроллера, помогая эффективно создавать очереди действий, выполняемых в течение запроса. Этот помощник позволяет добавлять действия посредством установки новых объектов запросов или наборов действие/контроллер/модуль.

## Вызов помощника ActionStack инициализирует плагин ActionStack

При вызове помощника `ActionStack` неявным образом регистрируется плагин `ActionStack`. Это значит, что нет необходимости явным образом регистрировать плагин `ActionStack` для того, чтобы использовать его функционал.

## Добавление задачи с использованием имен действия, контроллера и модуля

Зачастую наиболее простым способом будет указание действия, контроллера и модуля (и необязательных параметров запроса), почти так же, как если бы вы вызывали `Zend_Controller_Action::_forward()`:

    class FooController extends Zend_Controller_Action
    {
        public function barAction()
        {
            // Добавление двух действий в стек
            // Добавление вызова к /foo/baz/bar/baz
            // (FooController::bazAction() с переменной запроса bar == baz)
            $this->_helper->actionStack('baz',
                                        'foo',
                                        'default',
                                        array('bar' => 'baz'));

            // Добавление вызова к /bar/bat
            // (BarController::batAction())
            $this->_helper->actionStack('bat', 'bar');
        }
    }

## Добавление задачи с использованием объекта запроса

Иногда имеет смысл использовать объект запроса, что более соответствует духу ООП. Объект запроса тоже можно передавать помощнику `ActionStack`.

    class FooController extends Zend_Controller_Action
    {
        public function barAction()
        {
            // Добавление двух действий в стек
            // Добавление вызова к /foo/baz/bar/baz
            // (FooController::bazAction() с переменной запроса bar == baz)
            $request = clone $this->getRequest();
            // Не устанавливайте контроллер и модуль;
            // используются текущие значения
            $request->setActionName('baz')
                    ->setParams(array('bar' => 'baz'));
            $this->_helper->actionStack($request);

            // Add call to /bar/bat
            // (BarController::batAction())
            $request = clone $this->getRequest();
            // Не устанавливайте модуль;
            // используется текущиее значение
            $request->setActionName('bat')
                    ->setControllerName('bar');
            $this->_helper->actionStack($request);
        }
    }