2010-12-09 6 views
6

J'utilise Zend Framework avec des modules pour mes applications et je suis intéressé à intégrer Doctrine 2 de la même façon:Zend Framework avec une structure modulaire + Doctrine 2

Un module contient:

  • contrôleurs
  • modèles
  • vues
  • aides

Le problème avec Doctrine 2 est qu'il nécessite d'avoir un répertoire d'entité avec un répertoire proxy. Je veux que le répertoire des entités soit le répertoire des modèles de ma structure modulaire et basé sur mes recherches, je n'ai pas trouvé de solution.

Actuellement, avec un module par défaut la mise en œuvre des métadonnées ressemble à ceci:

$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver(APPLICATION_PATH . '/modules/default/models')); 

Si je veux ajouter un nouveau module, disons « cm » Je n'ai aucun moyen de gérer les modèles là-bas avec Doctrine.

Y at-il quelqu'un qui a une solution au problème?

+0

Je sais qu'il ya un prochain séminaire Web: Doctrine de Zend Framework v2 + 14-Dec-2010 http://www.zend.com/en/company/news/event/webinar-zend-framework-v1-doctrine-v2 – tawfekov

Répondre

4

Après quelques heures de travail, j'ai trouvé la bonne solution. A noter que les méthodes newDefaultAnnotationDriver, setProxyDir et setProxyNamespace de la classe \ ORM \ Configuration de Doctrine peuvent également recevoir des paramètres de tableau.

Cela dit, vous devez passer des tableaux avec des chemins de modèle pour chaque module et il fonctionnera

+0

+1. Probablement l'approche que je prendrais. –

0

J'ai mes proxies (générées automatiquement) dans un dossier de niveau d'application, voici ma structure de répertoire:

/project 
    /application 
     /domain 
      /proxies 
     /configs 
     /modules 
      /blog 
       /controllers 
       /views 
       /domain 
        /entities 
        /services 
        /repositories 
    /library 
    /public 
    /data 
0

Si vous créez votre fichier d'amorçage pour chaque module

<?php 
class User_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 
    protected function _initAutoload() 
    { 
     $autoloader = new Zend_Application_Module_Autoloader(array(
      'namespace' => 'User_', 
      'basePath' => dirname(__FILE__) . '/modules/user', 
      )); 
      return $autoloader; 
    } 
} 

et mettre cela dans le bootsrap par défaut pour charger les modèles de module par défaut

protected function _initAutoload() 
    { 
     $autoloader = new Zend_Application_Module_Autoloader(array(
      'namespace' => 'Default_', 
      'basePath' => dirname(__FILE__) . '/modules/default', 
      )); 
      return $autoloader; 
    } 

cela fonctionnera très bien

+0

Oui, les choses ont changé depuis que j'ai posté la question. Maintenant, il existe différentes solutions au problème. Quand j'ai écrit cette Doctrine était encore en version bêta et Zend Framework n'avait pas encore de bootstraps de module :) – bedeabza

Questions connexes