web-dev-qa-db-ja.com

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

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

83
ziiweb

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

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

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

最終的に、AppKernelにMyFooBundleをロードしていないことに気付きました。

new My\FooBundle\MyFooBundle()

これをデバッグする優れた方法は、次のコマンドを実行することです。

app/console doctrine:mapping:info
15
mogoman

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

独自のバンドルをマッピングリストに追加します。

13
Mark Fu

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

7

この問題を解決するには、$useSimpleAnnotationReader=falseMetaDataConfigurationを作成するとき。

7
gruentee

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

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

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

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

7
wucdbm

マーク・フーとモゴマンへの大きなTHX

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

app/console doctrine:mapping:info

本当に助けました!

実際、このコマンドは単にエラーで停止します...フィードバックはありませんが、すべてがうまくいくと、すべてのエンティティが一覧表示されます。

6
MediaVince

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

3

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.');
}

幸運を!

私の場合、リファクタリング中は熱心すぎて、doctrine ymlファイルを削除しました!

0
jhchnc