파일 시스템에서 클래스를 이동한 후 "클래스 XXX가 유효한 엔티티 또는 매핑된 슈퍼 클래스가 아닙니다"
Aib\PlatformBundle에서 엔티티 클래스를 받았습니다.엔티티\사용자php
폼클래스를 만드는 데 문제가 없었습니다.
php app/console 원칙: 생성: 양식 AibPlatformBundle:사용자
네임스페이스를 Aib\PlatformBundle\로 변경했습니다.엔티티\아이덴티티\사용자, 하지만 이전에 말한 작업으로 폼을 생성하려고 하면 다음과 같이 표시됩니다.
"클래스 Aib\Platform Bundle\"엔티티\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
{
...
감 잡히는 게 없어요?
symfony 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: ~
독자적인 번들을 매핑목록에 추가합니다.
이 문제는 설정으로 해결했습니다.$useSimpleAnnotationReader=false
시MetaDataConfiguration
.
는 이 했습니다.false
로서 「」를 참조해 주세요.Doctrine\ORM\Configuration::newDefaultAnnotationDriver
.
구글과 소스코드를 뒤지는 데 시간이 좀 걸렸다.
Symfony 설치와 무관한 다른 디렉토리를 가리키는 매핑을 사용하고 있었기 때문에 레거시 코드도 사용해야 했기 때문에 특별한 경우가 있었습니다.
레거시 엔티티를 리팩터링했더니 작동을 멈췄습니다.그들은 예전에@Annotation
@ORM\Annotation
리팩터링 후 메타데이터를 읽지 못했습니다.간단한 주석 리더를 사용하지 않으면 모든 것이 괜찮아 보입니다.
제 경우 서버 캐시를 eAccelerator에서 APC로 변경함으로써 문제가 해결되었습니다.eAccelerator가 파일에서 주석을 모두 삭제하여 주석을 끊는 것 같습니다.
마크 푸와 거물에게 큰 일
난 그게 구성 어딘가에 있을 거란 걸 알았어.yml...테스트 할 수 있습니다.
app/console doctrine:mapping:info
정말 도움이 됐어요!
사실 이 명령어는 단순히 오류로 인해 정지됩니다.피드백은 없지만, 모든 것이 정상일 때 나열된 모든 엔티티를 볼 수 있습니다.
설명서에 따르면 번들의 Resources/config/doctrine 폴더에서 충돌하는 자동 생성된 orm.php 파일을 삭제하여 동일한 예외를 해결했습니다.예를 들어 YAML 메타데이터 정의를 주석이 달린 PHP 엔티티 클래스 정의와 함께 사용할 수 없습니다."
PHP 5.3.16을 사용하고 있을 가능성이 매우 높습니다(Symfony 2.x는 PHP 5.3.16에서는 동작하지 않습니다).어쨌든 체크 페이지를 http://you.site.name/config.php에 로드해야 합니다.호스팅 서버에서 프로젝트가 작동하지 않으면 다음 행을 "config.disc"에서 삭제해야 합니다.
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.');
}
행운을 빕니다.
- 엔티티에 적절한 엔티티 및 테이블 주석이 있어야 합니다(순서는 중요할 수 있으므로 둘 다 시도해 보십시오).
- 커스텀 저장소가 있는 경우에는 반드시 엔티티 클래스 자체($entityManager->getRepository("your ENTITY class name")를 통해 액세스해야 합니다.이는 Repo 클래스가 엔티티티 자체여야 한다고 생각하도록 Repo 클래스를 속이기 때문입니다.바보같지만 독트린은 구별하기 힘들지 않다.
제 실수는 제가 한 거였어요
$em->getRepository(EntityRepository::class)
대신
$em->getRepository(Entity::class)
내 경우 리팩터 중에 너무 열성적이어서 교리 yml 파일을 삭제했다!
Mac에서는 src/MainBundle/Resource/Config/Doctrine을 사용하고 있었습니다.물론 Mac에서는 동작했지만 실제 가동 중인 Ubuntu 서버에서는 동작하지 않았습니다.Config에서 Config로, Autrin에서 교리로 이름이 바뀌면 매핑 파일이 발견되어 작동하기 시작했습니다.
내 경우 make:entity를 만든 후 다음 명령을 시도했습니다.
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity
데이터베이스로부터 엔티티를 생성합니다.단, 이 명령어는 컨트롤러 내에서 엔티티를 사용하거나 나중에 사용할 경우 알 수 없는 메서드오류(getId 등)를 발생시키는 getters 및 setters를 제공하지 않습니다.그래서 생성된 엔티티티로 돌아가기로 했습니다.
php bin/console make:entity
그래서 누락된 메서드를 다시 가져올 수 있지만 안타깝게도 오류 클래스가 유효한 엔티티 또는 매핑된 슈퍼 클래스가 아닙니다.이 오류를 방지하기 위해 이 문서를 읽을 인내심이 없습니다.
[1]: https://www.doctrine-project.org/projects/doctrine-orm/en/2.11/tutorials/override-field-association-mappings-in-subclasses.html#override-field-association-mappings-in-subclasses 특히 주석 대신 속성을 사용하고 있기 때문에 생성된 엔티티를 가져와 getters를 생성하는 다음 명령을 추가했을 뿐입니다.및 세터$ php bin/console make:entity --regenerate App
는 왜 이 이 알 수 .
app/console이 아닌 app/console_dev를 사용하여 당신의 경우와 동일한 오류 메시지를 제거하였습니다.
언급URL : https://stackoverflow.com/questions/7820597/class-xxx-is-not-a-valid-entity-or-mapped-super-class-after-moving-the-class-i
'source' 카테고리의 다른 글
EC2의 Amazon RDS Aurora vs RDS MySQL vs MySQL? (0) | 2022.11.18 |
---|---|
래퍼 클래스 및 프리미티브 유형을 사용해야 하는 경우 (0) | 2022.11.18 |
Maven 패키지는 작동하지만 Intelij의 빌드는 실패함 (0) | 2022.11.18 |
권한을 부여하는 동안 사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다.특권을 부여하려면 어떻게 해야 합니까? (0) | 2022.11.18 |
mysql dump의 처리 방법을 어떻게 알 수 있습니까? (0) | 2022.11.18 |