I’m developing a web application using Zend Framework 2 which will be made of several modules, and I’d like to put the entity classes in the module to which they belong.
Is it possible to do this using Doctrine2 ORM? By reading the docs, it seems to always expect to have all the entities under at most one namespace, while I’d like to have
- Module1\Entity
- Module2\Entity
- and so on…
How could this be made possible?
Thanks to all!
The first step to doctrine configuration is within your global configuration file to set up the connection. Personally i do this in two files, the first is
./config/autoload/global.phpand the second one being./config/autoload/local.phpThis is for one very reason and this is that anything containing
localdoesn’t get posted into my git repositories. So my credentials are safe../config/autoload/global.php
./config/autoload/local.php
The second step would be to create a driver for your entities. This is done on Module Namespace base.
./modules/ModuleNamespace/config/module.config.php
What’s happening there? Well, we extend the doctrine[‘driver’] array by adding a new driver. The driver has the namespace of our module. For this we also need to define the namespace in our configuration file. The driver defines that all Entities for this driver are within a certain path.
The next step done is that the
orm_defaultsdriver gets extended by an assignment defining that allModuleNamespace\Entityclasses are loaded from ourModuleNamespace_driverconfiguration.And ultimately this is done for each single module. So no matter if you’re having a
Filemanager\Entity\FileorPictureDb\Entity\Fileclasses, both will work and both will get loaded. Modules are – by nature – independant from each other. Though they can have dependencies, or rather work well together, they function on their own. So multiple modules with multiple entities are no problem at all 😉I hope this makes you understand the topic a little bit. For live working examples i have wrote two blog posts covering the topic.
These may also help you out a little bit.