Zend Framework: Comment définissez-vous votre répertoire de disposition dans une application modulaire?

StackOverflow https://stackoverflow.com/questions/475236

Question

la structure de répertoire que j'essaie de réaliser serait la suivante:

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)

mais je ne vois pas comment laisser Zend trouver mon layout.phtml dans chacun de mes modules.

dans mon bootstrap, j'ai:

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

Où vais-je mal?

Mise à jour:

Je n’ai pas examiné cette question depuis longtemps. La solution acceptée peut donc ne pas être à jour. Si quelqu'un souhaite publier une solution plus à jour à cette question (par exemple, ZF 1.8+), veuillez le faire! Ce serait utile pour ceux qui recherchent une solution à ce problème.

Était-ce utile?

La solution

Vous devriez consulter Par module Zend_Layout , dans cet article, l'auteur couvre exactement ce que vous êtes. en essayant d'atteindre. Sa méthodologie consiste à écrire un plug-in pour le contrôleur frontal qui gère l'enregistrement de la mise en page.

Autres conseils

Utilisation de Zend Framework 1.12 (je ne l’ai pas testé sur les versions précédentes): fonctionne immédiatement!

J'utilise habituellement application.ini pour configurer les éléments afin, entre autres, d'activer les dispositions:

resources.layout.layout = "layout"

... ou quelle que soit la structure par défaut à appeler. En tant que " layoutPath " n'a pas été défini, Zend_Layout va rechercher dans " Application / modules // views / scripts " pour un fichier appelé "layout.phtml"

Si vous utilisez l'outil zend, il commencera les présentations avec la ligne suivante:

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

Cela convient également. Supprimez simplement le répertoire ou évitez de créer le paramètre par défaut "layout.phtml". Si la mise en page par défaut n’est pas trouvée dans ce répertoire, elle recherchera dans de modules comme précédemment le fichier & layout; layout.phtml " à l'intérieur de "Application / modules // views / scripts".

Si la présentation n'est pas trouvée dans un module, elle chargera la présentation du module par défaut.

Aussi simple que cela!

Si vous avez besoin de plus de travail avec votre modèle, vous pouvez y ajouter un plugin, par exemple:

resources.layout.pluginClass = "YourLibrary_Controller_Plugin_Layout"

et faites des choses supplémentaires à l'intérieur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top