it-swarm-id.com

"Kelas XXX bukan entitas yang valid atau kelas super yang dipetakan" setelah memindahkan kelas di sistem file

Saya memiliki kelas entitas di Aib\PlatformBundle\Entity\User.php

Saya tidak punya masalah mencoba membuat kelas bentuk melalui

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

Sekarang saya telah mengubah namespace menjadi Aib\PlatformBundle\Entity\Identity\User, tetapi ketika saya mencoba untuk menghasilkan formulir dengan tugas yang saya katakan sebelumnya dikatakan:

"Kelas Aib\PlatformBundle\Entity\Pengguna bukan entitas yang valid atau kelas super yang dipetakan."

Ini adalah konten file:

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

Ada ide?

symfony2.0.4

83
ziiweb

Punya masalah ini - jangan lupa anotasi * @ORM\Entity seperti di bawah ini:

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

Punya masalah ini kemarin dan menemukan utas ini. Saya membuat entitas dengan pemetaan dalam bundel baru (mis. MyFooBundle/Entity/User.php), melakukan semua konfigurasi sesuai dengan dokumen tetapi mendapat kesalahan yang sama dari atas ketika mencoba memuat aplikasi.

Pada akhirnya saya menyadari bahwa saya tidak memuat MyFooBundle di AppKernel:

new My\FooBundle\MyFooBundle()

Cara yang bagus untuk men-debug ini adalah dengan menjalankan perintah ini:

app/console doctrine:mapping:info
15
mogoman

Periksa file config.yml Anda, harus mengandung sesuatu seperti ini:

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

Tambahkan bundel Anda sendiri ke daftar pemetaan.

13
Mark Fu

Dalam kasus saya, masalahnya diselesaikan dengan mengubah cache server saya dari eAccelerator ke APC . Rupanya eAccelerator menghapus semua komentar dari file yang memecah anotasi Anda.

7

Saya mengatasi masalah ini dengan menetapkan $useSimpleAnnotationReader=false saat membuat MetaDataConfiguration.

7
gruentee

Saya memecahkan ini dengan meneruskan false sebagai parameter kedua ke Doctrine\ORM\Configuration::newDefaultAnnotationDriver.

Butuh beberapa saat untuk menggali melalui Google dan kode sumber.

Kasus saya agak istimewa karena saya menggunakan pemetaan yang menunjuk ke direktori lain yang tidak terkait dengan instalasi Symfony karena saya juga harus menggunakan kode lawas.

Saya telah refactored entitas warisan dan mereka berhenti bekerja. Mereka biasa menggunakan @Annotation dari pada @ORM\Annotation, jadi setelah refactoring, gagal membaca metadata. Dengan tidak menggunakan pembaca anotasi sederhana, semuanya tampak baik-baik saja.

7
wucdbm

terima kasih untuk Mark Fu dan mogoman

Saya tahu itu harus berada di suatu tempat di config.yml ... dan dapat mengujinya terhadap

app/console doctrine:mapping:info

sangat membantu!

Sebenarnya, perintah ini hanya berhenti pada kesalahan ... tidak ada umpan balik, tetapi ketika semuanya baik-baik saja Anda harus dapat melihat semua entitas Anda terdaftar.

6
MediaVince

Saya menyelesaikan pengecualian yang sama dengan menghapus file orm.php autogenerasi yang bertentangan dalam folder Resources/config/doctrine bundle; menurut dokumentasi: "Suatu bundel hanya dapat menerima satu format definisi metadata. Misalnya, tidak mungkin untuk mencampur definisi metadata YAML dengan anotasi PHP definisi kelas entitas."

3

Kemungkinan yang sangat tinggi bahwa Anda memiliki PHP 5.3.16 (Symfony 2.x tidak akan bekerja dengannya). Lagi pula Anda harus memuat halaman periksa di http://you.site. name/config.php Jika Anda memiliki proyek yang tidak berfungsi pada server hosting, baris berikutnya harus dihapus di "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.');
}

Semoga berhasil!

Dalam kasus saya, saya terlalu bersemangat selama refactor dan telah menghapus file doctrine yml!

0
jhchnc