the directory structure I’m trying to achieve would be this:
application/default/views/layouts/layout.phtml application/default/views/scripts/index/index.phtml application/admin/views/layouts/layout.phtml application/admin/views/scripts/index/index.phtml library/Zend config/config.ini public/index.php (bootstrap)
but I can’t figure out how to let Zend find my layout.phtml in each of my modules.
in my bootstrap I have:
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application/')); define('APPLICATION_ENVIRONMENT', 'testing'); //setup path to our library files set_include_path( APPLICATION_PATH . '/../library' . PATH_SEPARATOR . get_include_path() ); //register the autoloader require_once 'Zend/Loader.php'; Zend_Loader::registerAutoload(); //set config in the registry $config = new Zend_Config_Ini( APPLICATION_PATH . '/../config/config.ini', APPLICATION_ENVIRONMENT ); Zend_Registry::set('config', $config); //setup logging $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../log/debug.log'); $logger = new Zend_Log($writer); Zend_Registry::set('logger', $logger); //run! $frontController = Zend_Controller_Front::getInstance(); $frontController->addModuleDirectory(APPLICATION_PATH); //initialize Zend_Layout's MVC helpers Zend_Layout::startMvc(); $frontController->throwExceptions(true); try { Zend_Controller_Front::getInstance()->dispatch(); } catch (Exception $exception) { echo '<html><body><center>' . 'An exception occured while dispatching the front controller.'; if (defined('APPLICATION_ENVIRONMENT') && APPLICATION_ENVIRONMENT != 'production' ) { echo '<br /><br />' . $exception->getMessage() . '<br />' . '<div align="left">Stack Trace:' . '<pre>' . $exception->getTraceAsString() . '</pre></div>'; } echo '</center></body></html>'; exit(1); }
Where am I going wrong?
Update:
I haven’t looked at this in a long time, so the accepted solution may not be up-to-date. If anyone wants to post a more up-to-date solution to this question (i.e. ZF 1.8+), please do so! It would be helpful to others who are looking for a solution to this.
You should check out Per Module Zend_Layout, in this article, the author covers exactly what you are trying to achieve. His methodology is to write a plugin for the front controller that handles layout registration.