在 Zend Framework 2 模块结构中映射许多命名空间时的原则错误
Doctrine error in mapping many namespaces inside Zend Framework 2 module structure
我在 Doctrine2 尝试映射我的 class 结构时收到错误消息。
我的 Zend 应用程序的模块结构如下:
module
ModuleOne
config
module_config.php
src
ModuleOne
Entity
ClassOne.php
ModuleOneAdmin
Entity
ClassTwo.php
ClassTwoRepository.php
Module.php
ModuleTwo
config
module_config.php
src
ModuleTwo
Entity
ClassThree.php
Module.php
我在 ModuleOne 中有两个子命名空间,因此,我的自动加载器(在 ModuleOne/Module.php 中)是这样配置的:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ . 'Admin' => __DIR__ . '/src/' . __NAMESPACE__ . 'Admin',
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__
),
),
);
}
在ModuleOne/config/module_config.php中配置了学说
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(
__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity'
)
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
),
),
),
)
我在另一个拥有控制器和视图的模块(我没有在模块结构中指定以避免详尽无遗)中使用 ModuleOne 和 ModuleTwo。
当我 运行 我的应用程序时,它在调用实体存储库的行中出现错误:
$repository = $this->getEm()->getRepository('ModuleOneAdmin\Entity\ClassTwo');
错误是:
The class 'ModuleOneAdmin\Entity\ClassTwo' was not found in the chain configured namespaces ModuleOne\Entity, ModuleTwo\Entity
我在 Whosebug 和其他站点中通过 google 搜索搜索了很多关于此类问题的其他问题,但 none 解决了我的问题。就像 Doctrine 在其内部映射中找不到我的 ModuleOneAdmin 一样。是否缺少某些配置?
提前致谢。
我发现了问题,我没有在 doctrine 配置中包含管理实体文件夹的驱动程序路径。
下面的代码有效。
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(
__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity'
)
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver',
__NAMESPACE__ . 'Admin\Entity' => __NAMESPACE__ . '_driver'
),
),
),
)
我在 Doctrine2 尝试映射我的 class 结构时收到错误消息。
我的 Zend 应用程序的模块结构如下:
module
ModuleOne
config
module_config.php
src
ModuleOne
Entity
ClassOne.php
ModuleOneAdmin
Entity
ClassTwo.php
ClassTwoRepository.php
Module.php
ModuleTwo
config
module_config.php
src
ModuleTwo
Entity
ClassThree.php
Module.php
我在 ModuleOne 中有两个子命名空间,因此,我的自动加载器(在 ModuleOne/Module.php 中)是这样配置的:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ . 'Admin' => __DIR__ . '/src/' . __NAMESPACE__ . 'Admin',
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__
),
),
);
}
在ModuleOne/config/module_config.php中配置了学说
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(
__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity'
)
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
),
),
),
)
我在另一个拥有控制器和视图的模块(我没有在模块结构中指定以避免详尽无遗)中使用 ModuleOne 和 ModuleTwo。
当我 运行 我的应用程序时,它在调用实体存储库的行中出现错误:
$repository = $this->getEm()->getRepository('ModuleOneAdmin\Entity\ClassTwo');
错误是:
The class 'ModuleOneAdmin\Entity\ClassTwo' was not found in the chain configured namespaces ModuleOne\Entity, ModuleTwo\Entity
我在 Whosebug 和其他站点中通过 google 搜索搜索了很多关于此类问题的其他问题,但 none 解决了我的问题。就像 Doctrine 在其内部映射中找不到我的 ModuleOneAdmin 一样。是否缺少某些配置?
提前致谢。
我发现了问题,我没有在 doctrine 配置中包含管理实体文件夹的驱动程序路径。
下面的代码有效。
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(
__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity'
)
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver',
__NAMESPACE__ . 'Admin\Entity' => __NAMESPACE__ . '_driver'
),
),
),
)