【问题标题】:Doctrine2 repositories, multiple dirsDoctrine2 存储库,多个目录
【发布时间】:2011-03-29 02:53:40
【问题描述】:

我正在重构并将我的学说 2 实体/存储库以及可能的代理放入单独的文件夹中。

我将它设置为读取多个实体目录,但我正在与 zend 框架集成,并且我的模型有一个 _ 命名空间,Admin_Model_Repository_User 而不是 Application\Entity\Repository\User

任何人都有管理代理和存储库的多个路径的任何指针。

【问题讨论】:

    标签: zend-framework doctrine doctrine-orm


    【解决方案1】:

    我不确定代理,但您当然可以轻松指定多个实体和存储库位置。

    创建驱动程序时,您可以传递单个路径字符串或数组。以 xml 为例:

    $driverImpl = new Doctrine\ORM\Mapping\Driver\XmlDriver(array(
        APPLICATION_PATH . '/modules/admin/models',
        APPLICATION_PATH . '/modules/default/models'
    ));
    

    或带注释:

    $driverImpl = $config->newDefaultAnnotationDriver(array(
        APPLICATION_PATH . '/modules/admin/models',
        APPLICATION_PATH . '/modules/default/models'
    ));
    

    这适用于任何映射驱动程序。或者您可以在 $driverImpl 创建后调用它的 addPath()。

    对于存储库,如果您在映射中指定存储库类,只要自动加载器可以访问它,它就可以在任何位置工作。

    【讨论】:

    • 嘿,谢谢,是的,我从多个路径(可能是存储库)读取实体,但我不确定教义如何加载代理。只是为了更好地衡量,我让教义创建代理,但每当我使用该实体时,我都会得到这个:The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Admin_Model_Admin" of the object you are trying to operate on was loaded _before_ unserialize() gets called
    • 确保您有一个可以加载 Admin_Model_Admin 的自动加载器。尽管我认为 Doctrine 在加载映射文件时自己会这样做。这基本上意味着一个类的对象在类本身被加载之前被反序列化。
    【解决方案2】:

    嘿,谢谢,你让我走上了正轨。我正在使用 zend_auth 通过会话存储来持久化实体,并且我正在调用 getIdentity()->getId() ,它不喜欢它。在不分离实体目录的情况下工作正常,但它没有问题 atm,我只是将 id 保存到存储中,并让我的类从 id 重新创建对象。

    现在好像可以了,谢谢帮助

    【讨论】:

      【解决方案3】:

      我的 ZF2 解决方案

      在文件module.doctrine_orm.local.config.php中

      'drivers' => array(
              'Admin' => array(
                  'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                  'namespace' => 'Admin\Model',
                  'paths' => array('module/Admin/src/Admin/Model')
              ),
              'Accounting' => array(
                  'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                  'namespace' => 'Accounting\Model',
                  'paths' => array('module/Accounting/src/Accounting/Model')
              )
          ),
      

      'orm_driver_chain' => array(
                      'parameters' => array(
                          'drivers' => array(
                              'application_annotation_driver' => $settings['drivers']['Accounting'],
                              'application_annotation_driver2' => $settings['drivers']['Admin']
                          ),
                          'cache' => $settings['cache']
                      )
                  ),
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-08
        • 1970-01-01
        • 2023-01-13
        • 2015-05-23
        • 1970-01-01
        • 1970-01-01
        • 2016-10-29
        • 1970-01-01
        相关资源
        最近更新 更多