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


93

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


네임 스페이스를 업데이트하는 것을 잊은 User를 확장하는 클래스가 있습니까?
문제가있는

3
내가 아는 한, Symfony는 네임 스페이스에 관계없이 항상 AibPlatformBundle : UserAim \ PlatformBundle \ Entity \ User로 확인 하려고 시도하기 때문에 엔티티의 하위 네임 스페이스를 정의 할 수 없습니다.
Alessandro Desantis

답변:


228

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

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

16

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

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

new My\FooBundle\MyFooBundle()

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

app/console doctrine:mapping:info

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

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


건배!! 내 구성 (Sonata에서)은 매핑이 있습니다 : ~, 번들을 지정하지 않았습니다 .. 수동으로 추가하면 내 문제가 해결되었습니다. :)
shousper

10

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

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

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

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


9

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


Opcache에는 주석 제거를 비활성화하는 설정 opcache.save_comments=1이 있습니다. eAccelerator / APC에 대해서도 하나가있을 수 있습니까?
Oylex 2017

9

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


7

Mark Fu와 mogoman에게 큰 thx

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

app/console doctrine:mapping:info

정말 도움이되었습니다!

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


3

번들의 Resources / config / doctrine 폴더에서 충돌하는 자동 생성 orm.php 파일을 삭제하여 동일한 예외를 해결했습니다. 문서에 따르면 "번들은 하나의 메타 데이터 정의 형식 만 받아 들일 수 있습니다. 예를 들어 YAML 메타 데이터 정의를 주석이 달린 PHP 엔티티 클래스 정의와 혼합 할 수 없습니다."


감사합니다. 당신은 저에게 많은 시간을 절약했습니다. 이 오류는 php 형식의 엔티티를 생성 한 후 삭제하고 동일한 이름으로 주석이 추가 된 새 엔티티를 생성 한 것보다 발생했습니다.
iMx

1

PHP 5.3.16이있을 가능성이 매우 높습니다 (Symfony 2.x는 작동하지 않습니다). 어쨌든 http://you.site.name/config.php에서 확인 페이지를로드해야합니다 . 호스팅 서버에서 프로젝트가 작동하지 않은 경우 "config.php"에서 다음 줄을 제거해야합니다.

if (!in_array(@$_SERVER['REMOTE_ADDR'], array(
    '127.0.0.1',
    '::1',
))) {
    header('HTTP/1.0 403 Forbidden');
    exit('This script is only accessible from localhost.');
}

행운을 빕니다!


0

제 경우에는 리팩터링하는 동안 너무 열심이어서 교리 yml 파일을 삭제했습니다!


0

내 Mac의 경우에는 src / MainBundle / Resource / Config / Doctrine을 사용했지만 물론 Mac에서는 작동했지만 프로덕션 Ubuntu 서버에서는 작동하지 않았습니다. Config를 config로, Doctrine을 doctrine으로 이름을 바꾸면 매핑 파일이 발견되어 작동하기 시작했습니다.


-1

app / console 대신 app / console_dev를 사용하여 귀하의 경우와 동일한 오류 메시지를 제거했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.