开发者

Zend Framework with modular structure + Doctrine 2

开发者 https://www.devze.com 2023-01-29 10:29 出处:网络
I use Zend Framework with modules for my appli开发者_运维百科cations and I am interested in integrating Doctrine 2 in the same fashion:

I use Zend Framework with modules for my appli开发者_运维百科cations and I am interested in integrating Doctrine 2 in the same fashion:

A module contains:

  • controllers
  • models
  • views
  • helpers

The problem with Doctrine 2 is that it requires to have an entity directory along with a proxy directory. I want the entities directory to be the models directory from my modular structure and based on my research I haven't found a solution.

Currently, with a default module the metadata implementation looks like this:

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

If I want to add a new module, let's say "cms" I have no way of managing the models there with Doctrine.

Is there anyone that has a solution for the problem ?


After some hours of work I came up with the correct solution. To be noted that the newDefaultAnnotationDriver, setProxyDir and setProxyNamespace methods of Doctrine's \ORM\Configuration class can receive also array parameters.

This being said, you need to pass arrays with model paths for every module and it will work


I have my proxies (auto-generated) in an application level folder, here's my directory structure:

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


If you create bootstrap file for each 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;
    }
}

and put this in the default bootsrap to load default module models

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

it will work fine

0

精彩评论

暂无评论...
验证码 换一张
取 消