# ActionStack

Помощник 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();
            // Использовать текущие контроллер и модуль;
            // установить новое действие - baz
            $request->setActionName('baz')
                    ->setParams(array('bar' => 'baz'));
            $this->_helper->actionStack($request);

            // Добавить вызов к /bar/bat
            // (BarController::batAction())
            $request = clone $this->getRequest();
            // Использовать текущий модуль; установить новый контроллер - bar
            // и действие - bat
            $request->setActionName('bat')
                    ->setControllerName('bar');
            $this->_helper->actionStack($request);
        }
    }