Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 条令-嵌套实体子目录/名称空间_Php_Doctrine Orm_Doctrine - Fatal编程技术网

Php 条令-嵌套实体子目录/名称空间

Php 条令-嵌套实体子目录/名称空间,php,doctrine-orm,doctrine,Php,Doctrine Orm,Doctrine,我已经搜索了很多关于这个问题的答案,但我现在没有得到任何听起来合理的答案。所以,这是一个两难的问题 我有一个带有嵌套结构的实体目录。这对我们的组织更有效。因此,我们可能会有如下情况: ./Entity ./Entity/User ./Entity/User.php ./Entity/User/Type ./Entity/User/Type/Administrator.php ./Entity/User/Type/Editor.php 因此,基本上有两种类型的用户。在本例中,名称空间将遵循PS

我已经搜索了很多关于这个问题的答案,但我现在没有得到任何听起来合理的答案。所以,这是一个两难的问题

我有一个带有嵌套结构的
实体
目录。这对我们的组织更有效。因此,我们可能会有如下情况:

./Entity
./Entity/User
./Entity/User.php
./Entity/User/Type
./Entity/User/Type/Administrator.php
./Entity/User/Type/Editor.php

因此,基本上有两种类型的用户。在本例中,名称空间将遵循PSR4。在上述情况下,我们将拥有以下文件:

User.php

名称空间实体;
使用条令\ORM\Mapping作为ORM;
/**
*用户实体
*
*@ORM\Entity
*@ORM\InheritanceType(“单表”)
*@ORM\DiscriminatorColumn(name=“user\u key”,type=“string”)
*@ORM\map({
*“管理员”=“实体\用户\类型\管理员”,
*“编辑器”=“实体\用户\类型\编辑器”,
* })
*
*@ORM\Table
*/
抽象类用户
Administrator.php

名称空间实体\用户\类型;
使用条令\ORM\Mapping作为ORM;
使用实体\用户;
/**
*管理员实体
*
*@ORM\Entity
*/
类管理员扩展用户
通过这个,我得到了以下错误:

Doctrine\ORM\Mapping\MappingException: Entity class 'Entity\User\Type\Administrator' used in the discriminator map of class 'Entity\User' does not exist.

/srv/www/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/MappingException.php:479
/srv/www/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php:2875
/srv/www/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php:2847
/srv/www/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php:265
/srv/www/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/MappingDriverChain.php:79
/srv/www/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:155
/srv/www/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/AbstractClassMetadataFactory.php:306
/srv/www/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:82
/srv/www/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/AbstractClassMetadataFactory.php:185
/srv/www/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php:288
/srv/www/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:1764
/srv/www/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:1737
/srv/www/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php:610
那么,如何注册这个名称空间,或者这里的确切问题是什么?我已经尝试显式地将实体路径传递给用于映射的
注释驱动程序

我不是在这里寻找Symfony yml配置解决方案。我也没有寻找实体管理器的两个实例。我想要一个实体管理器,我想要支持这些名称空间

在生成代理类时,我已经确认它们正确地识别嵌套的名称空间实体并正确地生成代理类

更新:

很明显,代理类是使用附加的名称空间生成的,因为实际的实体是结构化的。所以,我想这看起来是正确的

//正常
名称空间实体\代理\\uuuu CG \\uuuuu\实体;
//嵌套
名称空间实体\Proxy\\uuuuuucg\uuuuu\Entity\User\Type;
但是,这些代理类文件与所有其他代理类处于同一级别—没有嵌套


我对如何在缓存中加载和使用代理不太了解,无法确定这是否是一个问题。通过更改名称空间并嵌套在代理路径中的DIR中进行的两次测试没有任何积极的结果,可能是因为它仍在破坏逻辑,或者是因为基于代理加载的工作方式,这不是一个问题。

您说您不想要基于Symfony的解决方案,但ORM前缀来自Symfony。使用开箱即用原则时,通常只使用@Entity而不是@ORM\Entity。但我怀疑您有一个简单的PSR4名称空间映射问题。使用实体作为根命名空间前缀有点奇怪。通常,您会有一个项目范围的名称空间前缀,该前缀反过来会成为PSR4映射的一部分。我使用一个普通的条令引导文件测试了您的代码,它按预期工作。如果您愿意,我可以发布我的代码作为答案。如果不愿意,则显示bootstrap.php代码和composer.json的psr4部分。在对composer.json进行任何psr4更改后,请记住运行“composer dump autoload”。@Cerad感谢您的输入。名称空间仅用于示例目的,它都是伪代码。你的意思是,这一期中所描述的是可能的,并且得到了教义的支持吗?
ORM
use alias只允许使用较少的语句。这并没有什么内在的“Symfony”。Composer没有任何自动加载问题。在类似的嵌套目录中有一些服务可以很好地工作,并且与Symonfy的DI组件一起工作。不幸的是,实体管理器的引导相当大和复杂。但是,如果这是可行的…问题就解决了。文件名前面有一个前导(空格)。很高兴你让它工作了。(对我来说)条令文档中的示例很少使用ORM,而Symfony文档却使用ORM,这一直有点令人困惑。如果你拿一个条令的例子,加上use语句,它仍然不起作用。您需要使用特定的注释读取器。只是其中之一。