# ActionStack

ActionStack プラグインは、リクエストをスタックで管理します。 postDispatch プラグインとして動作します。 現在のリクエストオブジェクトで既に転送先が指定されている (別のアクションがコールされている) 場合は、何も行いません。 転送されていない場合はスタックの最上位の要素を取り出し、 そのリクエストが指すアクションに転送します。 スタックの処理は LIFO (後入れ先出し) 方式で行います。

このプラグインをフロントコントローラから取得するには、 `Zend_Controller_Front::getPlugin('Zend_Controller_Plugin_ActionStack')` とします。プラグインオブジェクトを取得したら、 さまざまな仕組みを利用できるようになります。

- `getRegistry()` および `setRegistry()`。 ActionStack は、内部的に `Zend_Registry` のインスタンスを使ってスタックを管理しています。 別のレジストリインスタンスでこれを置き換えたり、 インスタンスを取得したりする際にこれらのアクセサを使用します。

- `getRegistryKey()` および `setRegistryKey()`。 これらは、スタックに格納する際にレジストリのどのキーを使用するかを指定します。 デフォルト値は '`Zend_Controller_Plugin_ActionStack`' です。

- `getStack()` は、 そのアクションのスタック全体を取得します。

- `pushStack()` および `popStack()` は、それぞれスタックへの追加とスタックからの取り出しを行います。 `pushStack()` にはリクエストオブジェクトを渡します。

さらに `forward()` メソッドが存在します。 このメソッドにはリクエストオブジェクトを渡し、 フロントコントローラにおける現在のリクエストオブジェクトの状態を ここで渡したオブジェクトの状態に設定します。 そして、リクエストを未ディスパッチ状態に戻します (ディスパッチループの次の処理に強制的に進ませます)。