Domanda

la struttura delle directory che sto cercando di ottenere sarebbe questa:

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)

ma non riesco a capire come permettere a Zend di trovare il mio layout.phtml in ciascuno dei miei moduli.

nel mio bootstrap ho:

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);
}

Dove sbaglio?

Aggiornamento:

Non lo vedo da molto tempo, quindi la soluzione accettata potrebbe non essere aggiornata. Se qualcuno vuole pubblicare una soluzione più aggiornata a questa domanda (es. ZF 1.8+), per favore fallo! Sarebbe utile per gli altri che cercano una soluzione a questo.

È stato utile?

Soluzione

Dovresti dare un'occhiata a Per modulo Zend_Layout , in questo articolo l'autore tratta esattamente ciò che sei cercando di raggiungere. La sua metodologia è quella di scrivere un plugin per il front controller che gestisca la registrazione del layout.

Altri suggerimenti

Uso di Zend Framework 1.12 (non l'ho testato nelle versioni precedenti): funziona subito!

Di solito uso application.ini per configurare le cose così, in orther per abilitare i layout:

resources.layout.layout = "layout"

... o come dovrebbe essere chiamato il layout predefinito. Come "layoutPath" non è stato definito Zend_Layout esaminerà " Applicazione / moduli // viste / script " per un file chiamato " layout.phtml "

Se si utilizza lo strumento zend, verranno avviati i layout con la seguente riga:

resources.layout.layoutPath = APPLICATION_PATH "layouts/scripts"

Anche questo va bene, basta eliminare la directory o evitare di creare il "layout.phtml" predefinito. Se il layout predefinito non si trova in quella directory, cercherà in de module come in precedenza per " layout.phtml " all'interno " Applicazione / moduli // viste / script " ;.

Se il layout non viene trovato all'interno di un modulo, questo caricherà il layout del modulo predefinito.

Semplice come quello!

Se hai bisogno di ulteriore lavoro con il tuo modello, puoi aggiungere un plugin ad esempio:

resources.layout.pluginClass = "YourLibrary_Controller_Plugin_Layout"

e fai alcune cose extra al suo interno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top