現在、"Keith Pope" 著の "Zend Framework 1.8 Web Application Development" を読んでいます。その中で彼は、「ActionStack」を使用して、カテゴリのトップレベル メニューのコントローラがすべてのリクエストで呼び出されるように指示しています。プラグインのソース コードは次のとおりです。
class SF_Plugin_Action extends Zend_Controller_Plugin_Abstract
{
protected $_stack;
public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
$stack = $this->getStack();
// category menu
$categoryRequest = new Zend_Controller_Request_Simple();
$categoryRequest->setControllerName('category')
->setActionName('index')
->setParam(
'responseSegment',
'categoryMain'
);
// push requests into the stack
$stack->pushStack($categoryRequest);
}
public function getStack()
{
if (null === $this->_stack) {
$front = Zend_Controller_Front::getInstance();
if (!$front->hasPlugin(
'Zend_Controller_Plugin_ActionStack'
)) {
$stack = new Zend_Controller_Plugin_ActionStack();
$front->registerPlugin($stack);
} else {
$stack = $front->getPlugin('ActionStack');
}
$this->_stack = $stack;
}
return $this->_stack;
}
}
「ActionStack」プラグインのコードを読みました。「postDispatch」関数で現在のリクエストを保存し、「forward」関数で現在のリクエストのコントローラ、アクション、および設定パラメータを変更します。では、現在のリクエストはどうなるでしょうか? それはどのように実行されますか?
また、 ActionStack は悪だと聞きました。私は初心者なので、彼が(初心者のために)説明しなかったので、ほとんど理解できませんでした。なぜ ActionStack が悪なのか?