Sto leggendo il libro Zend Framework in Action e sono bloccato perchè non riesco a visualizzare correttamente il menù nel layout. Di seguito il codice.

In pratica vorrei capire come sfruttare i placeholders anche nell'utilizzo del layout.


application.ini
Codice PHP:
resources.frontController.plugins.ActionSetup "Intranet_Controller_Plugin_ActionSetup"
resources.frontController.plugins.ViewSetup "Intranet_Controller_Plugin_ViewSetup" 
library/Intranet/Controller/Plugin/ViewSetup.php
Codice PHP:
class Intranet_Controller_Plugin_ViewSetup extends Zend_Controller_Plugin_Abstract {
    
    protected 
$_view;
    
    public function 
dispatchLoopStartup(Zend_Controller_Request_Abstract $request) {
        
        
$viewRenderer Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
        
$viewRenderer->init();
        
$view $viewRenderer->view;
        
$this->_view $view;
        
        
$view->originalModule $request->getModuleName();
        
$view->originalController $request->getControllerName();
        
$view->originalAction $request->getActionName();
        
$view->doctype('XHTML1_STRICT');
        
$prefix 'Intranet_View_Helper';
        
$dir dirname(__FILE__).'/../../View/Helper';
        
$view->addHelperPath($dir$prefix);

    }

layouts/scripts/layout.phtml
Codice PHP:
...
            <?php $this->layout()->menu?>
...
application/modules/default/controllers/IndexController.php
Codice PHP:
class IndexController extends Zend_Controller_Action
{

    public function 
init()
    {
        
/* Initialize action controller here */
    
}

    public function 
indexAction()
    {
        
// action body
    
}

    public function 
menuAction()
    {
        
        
$mainMenu = array(
            array(
'title'=>'Home','url'=>$this->view->url(array(), nulltrue)),
            array(
'title'=>'Places','url'=>$this->view->url(array('controller'=>'place','action'=>'browse'), nulltrue)),
            array(
'title'=>'Articles','url'=>$this->view->url(array('controller'=>'articles'), nulltrue))
        );
        
        
        
$this->view->menu $mainMenu;
        
$this->_helper->viewRenderer->setResponseSegment('menu');
        
    }



library/Intranet/Controller/Plugin/ActionSetup.php
Codice PHP:
class Intranet_Controller_Plugin_ActionSetup extends Zend_Controller_Plugin_Abstract {
    
    public function 
dispatchLoopStartup(Zend_Controller_Request_Abstract $request) {
        
        
$front Zend_Controller_Front::getInstance();
        
        if(!
$front->hasPlugin('Zend_Controller_Plugin_ActionStack')) {
            
            
$actionStack = new Zend_Controller_Plugin_ActionStack();
            
$front->registerPlugin($actionStack);
        
        } else {
            
            
$actionStack $front->getPlugin('Zend_Controller_Plugin_ActionStack');
            
        }
        
        
$menuAction = clone($request);
        
$menuAction->setActionName('menu')->setControllerName('index');
        
$actionStack->pushStack($menuAction);
        
    }