2011-03-31 3 views
0

J'ai beaucoup de mal à comprendre comment nous pouvons avoir une structure de répertoire modulaire, avec la possibilité de charger des ressources qui doivent être partagées entre les modules. À savoir,Zend Framework Modules avec des ressources communes

application 
--- /forms 
--- /models 
--- /modules 
------/module1/ 
---------/models 
------/module2/ 
---------/models 

Maintenant, ce que je suis en train de faire est de formes de charge dans/application/formulaires à l'intérieur des modules. Tout ce que j'ai essayé fait que ces classes ne sont pas chargées.

J'ai essayé: 1) Laisser Zend essayer et comprendre automagiquement. 2) Spécifier tous les chemins dans le bootstrap principal pour le chemin d'application ainsi que les modules. I.e.,

protected function _initAutoload() 
{ 
    $front = $this->bootstrap("frontController")->frontController; 
    $modules = $front->getControllerDirectory(); 
    $default = $front->getDefaultModule(); 

    $moduleloader = new Zend_Application_Module_Autoloader(array(
     'namespace' => 'Application', 
     'basePath' => APPLICATION_PATH 
    )); 

    foreach (array_keys($modules) as $module) { 
     $moduleloader = new Zend_Application_Module_Autoloader(array(
      'namespace' => ucfirst(strtolower($module)), 
      'basePath' => $front->getModuleDirectory($module)) 
     ); 
    } 
} 

3) Frapper ma tête sur mon bureau plusieurs fois.

.. et oui, je réalise que je n'ai pas besoin de cette boucle pour les modules, car j'ai des bootstraps vides dans chaque répertoire du module.

Toutes les suggestions sont les bienvenues. Merci!

+0

Désolé ma description était erronée. Je n'inclue pas les formes, mais les éléments de forme. Cette réalisation m'a donné l'idée de vérifier que Form_Element était réellement mappé dans Zend_Application_Module_Autoloader, ce qui s'est avéré que ce n'était pas le cas. En ajoutant cela aux types de ressources, tout a commencé à fonctionner. –

Répondre

0

Essayez ceci:

protected function _initAutoload() 
{ 
    $autoloader = new Zend_Application_Autoloader_Resource(array(
     'namespace' => 'Application', 
     'basePath' => APPLICATION_PATH, 
     'resourceTypes' => array(
      'form' => array(
       'path' => 'forms/', 
       'namespace' => 'Form' 
      ) 
     ) 
    )); 

    return $autoloader; 
} 

vous n'avez pas besoin de la partie du module, comme vous semblez déjà savoir. Ajoutez d'autres types de ressources selon vos besoins.

Comme cela est très proche de ce que vous avez déjà, il peut y avoir un autre problème. Le devrait fonctionner au-dessus en supposant que:

  • points de APPLICATION_PATH au répertoire/application dans votre application
  • Les classes de formulaire sont nommés Application_Form_Something
  • Les noms de ces classes sont Something.php (sensible à la casse)

par exemple Si vous avez un formulaire de contact, vous pourriez appeler la classe Application_Form_Contact et cela vivrait à application/forms/Contact.php.

Si vous rencontrez toujours des problèmes, veuillez inclure un exemple d'une classe de formulaire qui n'est pas trouvée, ainsi que comment et où vous l'appelez.

+0

Voir mon commentaire pour ma réponse auto-réalisée. J'ai accepté cela car il avait d'excellentes suggestions, et pourrait être utile pour quelqu'un d'autre avec un problème similaire. –

Questions connexes