ファイルシステムでクラスを移動した後の「クラスXXXは有効なエンティティまたはマップされたスーパークラスではありません」


91

Aib \ PlatformBundle \ Entity \ User.phpにエンティティクラスがありました

私はフォームクラスを作成しようとして問題はありませんでした

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

名前空間をAib \ PlatformBundle \ Entity \ Identity \ Userに変更しましたが、タスクでフォームを生成しようとすると、次のように言っています。

「クラス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
    {
    ...

何か案が?

symfony2.0.4


名前空間の更新を忘れたUserを拡張するクラスはありますか?
問題のある

3
私の知る限り、Symfonyは名前空間に関係なく、常にAibPlatformBundle:UserAim \ PlatformBundle \ Entity \ Userに解決しようとするため、エンティティのサブネームスペースを定義することはできません。
Alessandro Desantis、2011年

回答:


227

この問題が発生しました- * @ORM\Entity以下のような注釈を忘れないでください:

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

15

昨日この問題があり、このスレッドを見つけました。新しいバンドル(例:MyFooBundle / Entity / User.php)でマッピングを使用してエンティティを作成し、ドキュメントに従ってすべての構成を行いましたが、アプリをロードしようとしたときに上記と同じエラーが発生しました。

結局、私はMyFooBundleをAppKernelにロードしていないことに気づきました。

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 '24

10

これを解決するにfalseは、2番目のパラメータとしてをに渡しますDoctrine\ORM\Configuration::newDefaultAnnotationDriver

Googleとソースコードを掘り下げるのにしばらく時間がかかりました。

レガシーコードも使用する必要があったため、Symfonyのインストールに関係のない別のディレクトリを指すマッピングを使用していたので、私のケースは一種の特別なものでした。

私はレガシーエンティティをリファクタリングしていましたが、機能しなくなりました。以前はの@Annotation代わりに使用していた@ORM\Annotationため、リファクタリング後にメタデータを読み取ることができませんでした。単純な注釈リーダーを使用しないことで、すべてが大丈夫なようです。


8

私の場合、サーバーのキャッシュをeAcceleratorからAPCに変更することで問題は解決しました。どうやらeAcceleratorは注釈を壊すファイルからすべてのコメントを取り除きます。


Opcacheにはコメントのストリッピングを無効にする設定がありますopcache.save_comments=1。おそらくeAccelerator / APCにもありますか?
Oylex

8

$useSimpleAnnotationReader=false作成するときに設定することで、この問題を解決しましたMetaDataConfiguration


7

Mark Fuとmogomanに大きなthx

私はそれがconfig.ymlのどこかにある必要があることを知っていました...そしてそれに対してそれをテストすることができました

app/console doctrine:mapping:info

本当に役に立ちました!

実際、このコマンドは単にエラーで停止します...フィードバックはありませんが、すべて問題なければ、リストされているすべてのエンティティを確認できます。


3

バンドルのResources / config / doctrineフォルダーで競合する自動生成されたorm.phpファイルを削除することにより、同じ例外を解決しました。ドキュメントによれば、「バンドルは1つのメタデータ定義形式のみを受け入れることができます。たとえば、YAMLメタデータ定義と注釈付きPHPエンティティークラス定義を混在させることはできません。」


ありがとうございました。あなたは私に多くの時間を節約してくれました。php形式のエンティティを作成した後でこのエラーを取得し、それを削除して、同じ名前で新しい注釈付きエンティティを作成しました。
iMx 2014年

1

PHP 5.3.16を使用している可能性が非常に高い(Symfony 2.xはPHPでは動作しません)。とにかく、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

私の場合、リファクタリング中に熱心すぎて、Doctrine 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.