2009-12-17 8 views
1

Actuellement je travaille sur un projet (basé sur ZF) et je me demande s'il est possible de désactiver un ou plusieurs modules. Par défaut, je veux dire que ZF ne le chargera pas du tout.Zend Framework - comment désactiver un ou plusieurs modules

Pour être plus précis, je voudrais désactiver l'un des modules d'application existants. Disons que mon App contient des modules écrits par Sombody d'autre et moi pour le moment en cours Je ne veux pas l'utiliser. J'espère que cette question a du sens pour vous.

-
Cordialement, Robert

+0

voulez-vous dire un des composants de Zend Framework? comme Zend_Form? ou l'un des modules de votre application? –

+0

qu'est-ce que vous comprenez par core_module? Pouvez-vous donner un exemple? –

Répondre

3

Si je comprends bien et que vous voulez désactiver un module (groupe de vues/contrôleurs) à partir de votre site, vous pouvez enregistrer un plugin routeShutdown()FrontController qui vérifie la requête routée. Si elle est désactivée, vous redirigez l'utilisateur vers un contrôleur d'erreur.

Créer un plugin qui vérifie si le module est désactivé

class MyDisabledModules extends Zend_Controller_Plugin_Abstract 
{ 
    protected $_disabled = array(
     'module1', 
     'module2', 
     'sales', 
    ); 


    public function routeShutdown(Zend_Controller_Request_Abstract $request) 
    { 
     $module = $request->getModuleName(); 

     if (in_array($module, $this->_disabled)) { 
      $request->setModuleName('default') 
        ->setControllerName('disabled') 
        ->setActionName('index') 
        ->dispatched(false); 
     } 
    } 
} 

puis l'enregistrer dans le FrontController:

Zend_Controller_Front::getInstance() 
    ->registerPlugin(new MyDisabledModules()); 

Vous pouvez coder en dur les plug-ins désactivé, vous pouvez les récupérer à partir d'un base de données, un XML, de tout ce que vous voulez.

+0

plus ou moins, c'est quelque chose que je voudrais atteindre. Merci – Robert

3

Je pense que ce que Luiz Damim a proposé est exagéré et faux. Le plugin sera appelé pour chaque appel inutile. Pourquoi faire des choses pour les modules désactivés?

Je ferais une détection basée sur un fichier de configuration où seuls les modules actifs sont instanciés.

MISE À JOUR Habituellement modules sont instanciés en masse:

$front->addModuleDirectory('/path/to/application/modules'); 

Mais vous pouvez activer les modules un par un, ou en passant un tableau avec seulement ceux que vous souhaitez activer.

$front->setControllerDirectory(array(
    'default' => '/path/to/application/controllers', 
    'blog' => '/path/to/application/blog/controllers' 
)); 

Si vous utilisez Zend_Application, je pense que vous devez changer cette ligne dans votre config:

resources.modules[] = 

avec

resources.modules = admin 
resources.modules = news 

Les premiers on charge tout les modules peuvent trouver dans le dossier de modules qui est par défaut comportement. Je n'ai pas encore travaillé avec Zend Application donc je ne suis pas sûr de ça, mais il doit y avoir quelque chose comme ça.

+0

Dans ce cas comment tu le ferais? De coz je pourrais ajouter une liste de modules actifs mais finalement je devrais vérifier si le module appelé est sur la liste blanche (a la bonne entrée dans le fichier de configuration). Cordialement, Robert – Robert

+0

@Robert vérification mise à jour –

Questions connexes