[php] 파일 시스템에서 클래스를 이동 한 후 “XXX 클래스는 유효한 엔티티 또는 매핑 된 수퍼 클래스가 아닙니다.”

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
    {
    ...

어떤 생각?

심포니 2.0.4



답변

이 문제가 발생했습니다- * @ORM\Entity아래와 같은 주석을 잊지 마십시오 .

/**
 * Powma\ServiceBundle\Entity\User
 *
 * @ORM\Entity
 * @ORM\Table(name="users")
 */


답변

어제이 문제가 있었고이 스레드를 찾았습니다. 새 번들 (예 : MyFooBundle / Entity / User.php)에서 매핑으로 엔터티를 생성하고 문서에 따라 모든 구성을 수행했지만 앱을로드하려고 할 때 위에서 동일한 오류가 발생했습니다.

결국 나는 AppKernel에서 MyFooBundle을로드하지 않는다는 것을 깨달았습니다.

new My\FooBundle\MyFooBundle()

이를 디버깅하는 가장 좋은 방법은 다음 명령을 실행하는 것입니다.

app/console doctrine:mapping:info


답변

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: ~

매핑 목록에 고유 한 번들을 추가합니다.


답변

false두 번째 매개 변수로 전달하여이 문제를 해결 했습니다 Doctrine\ORM\Configuration::newDefaultAnnotationDriver.

Google과 소스 코드를 파헤치는 데 시간이 걸렸습니다.

레거시 코드를 사용해야했기 때문에 Symfony 설치와 관련이없는 다른 디렉토리를 가리키는 매핑을 사용했기 때문에 제 경우는 일종의 특별했습니다.

레거시 엔티티를 리팩터링했고 작동을 멈췄습니다. 그들은 @Annotation대신 을 사용 @ORM\Annotation했으므로 리팩토링 후 단순히 메타 데이터를 읽지 못했습니다. 간단한 주석 판독기를 사용하지 않으면 모든 것이 정상인 것 같습니다.


답변

제 경우에는 서버 캐시를 eAccelerator 에서 APC 로 변경하여 문제가 해결되었습니다 . 분명히 eAccelerator는 주석을 깨는 파일에서 모든 주석을 제거합니다.


답변

을 (를) $useSimpleAnnotationReader=false만들 때 설정하여이 문제를 해결 했습니다 MetaDataConfiguration.


답변

Mark Fu와 mogoman에게 큰 thx

나는 그것이 config.yml 어딘가에 있어야한다는 것을 알았고 …

app/console doctrine:mapping:info

정말 도움이되었습니다!

사실,이 명령은 단순히 오류에서 멈 춥니 다. 피드백은 없지만 모든 것이 정상이면 나열된 모든 엔티티를 볼 수 있어야합니다.