在文件系统中移动类之后,"类XXX不是有效实体或映射的超类"

zii*_*web 86 php symfony doctrine-orm

我在Aib\PlatformBundle\Entity\User.php中有一个实体类

尝试通过创建表单类没有问题

php app/console doctrine:generate:form AibPlatformBundle:User

现在我将命名空间更改为Aib\PlatformBundle\Entity\Identity\User,但是当我尝试使用我之前说过的任务生成表单时,它说:

"Class Aib\PlatformBundle\Entity\User不是有效的实体或映射的超类."

这是文件内容:

<?php
namespace Aib\PlatformBundle\Entity\Identity;

use Doctrine\ORM\Mapping as ORM;

    /**
     * Aib\PlatformBundle\Entity\Identity\User
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Aib\PlatformBundle\Entity\Identity
    \UserRepository")
     */
    class User
    {
    ...
Run Code Online (Sandbox Code Playgroud)

任何的想法?

symfony2.0.4

Mik*_*ike 209

有这个问题 - 不要忘记* @ORM\Entity下面的注释:

/**
 * Powma\ServiceBundle\Entity\User
 *
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!:)节省了我很多时间! (6认同)
  • 我简直不敢相信这是如此之遥!我也不敢相信我也发生了错误,但是很好!谢谢! (2认同)

mog*_*man 15

昨天遇到这个问题,发现了这个帖子.我在新的包中创建了具有映射的实体(例如MyFooBundle/Entity/User.php),根据文档完成了所有配置,但在尝试加载应用程序时从上面得到了相同的错误.

最后我意识到我没有在AppKernel中加载MyFooBundle:

new My\FooBundle\MyFooBundle()
Run Code Online (Sandbox Code Playgroud)

调试它的一个好方法是运行此命令:

app/console doctrine:mapping:info
Run Code Online (Sandbox Code Playgroud)


Mar*_* Fu 13

检查你的config.yml文件,应该包含这样的东西:

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8
        types:
            json: Sonata\Doctrine\Types\JsonType

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        # auto_mapping: true
        entity_managers:
            default:
                mappings:
                    FOSUserBundle: ~
                    # ApplicationSonataUserBundle: ~
                    YourUserBundle: ~
                    SonataUserBundle: ~
Run Code Online (Sandbox Code Playgroud)

将您自己的包添加到映射列表.


Chr*_*len 7

在我的情况下,通过将我的服务器缓存从eAccelerator更改为APC来解决问题.显然,eAccelerator会删除文件中的所有注释,这会破坏您的注释.


小智 7

我通过传递false第二个参数来解决这个问题Doctrine\ORM\Configuration::newDefaultAnnotationDriver.

我花了一些时间挖掘谷歌和源代码.

我的情况有点特殊,因为我使用的映射指向与Symfony安装无关的另一个目录,因为我还必须使用遗留代码.

我重构了遗留实体,他们停止了工作.他们曾经使用@Annotation而不是@ORM\Annotation,因此在重构后它根本无法读取元数据.通过不使用简单的注释阅读器,一切似乎都很好.


gru*_*tee 7

我通过设置$useSimpleAnnotationReader=false创建时解决了这个问题MetaDataConfiguration.


Med*_*nce 6

对Mark Fu和mogoman来说很重要

我知道它必须在config.yml中的某个地方......并且能够针对它进行测试

app/console doctrine:mapping:info
Run Code Online (Sandbox Code Playgroud)

真有帮助!

事实上,这个命令只是停在一个错误...没有反馈,但当一切都很好,你应该能够看到列出的所有实体.