Symfony2 - Peringatan: class_parents(): Suasana Kelas tidak ada dan tidak dapat dimuat

Saya mencoba membuat entitas menggunakan yml dan saya mendapatkan kesalahan berikut:

[ErrorException]

  Warning: class_parents(): Class Ambience does not exist and could not be loaded in C:\wamp\www\demo\vendor\gedmo-doctrine-extensions\lib\Gedmo\Mapping\ExtensionMetadataFactory.php line 80

Saya telah membuat file bernama Entities.UserTestDelete.dcm.yml di FooBundle/Resources/config/doctrine/metadata/orm

Isi berkas:

Entities\UserTestDelete:
  type: entity
  table: users
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    name:
      type: string
      length: 50

Kemudian saya menjalankan perintah berikut:

php app/console doctrine:mapping:import "DemoFooBundle" yml

Dan kemudian saya mendapatkan kesalahannya. Adakah yang tahu mengapa hal itu bisa menjadi masalah?


person Georgi Angelov    schedule 30.06.2014    source sumber


Jawaban (2)


Baru saja mengalami masalah yang sama...dan berhasil menyelesaikannya...

a var_dump($this) di __contruct kelas pengecualian, dalam kasus saya:

  • Symfony\Component\Debug\Exception\ContextErrorException

memberi saya $message->$trace, yang mengarahkan saya ke:

  • vendor/sylius/resource-bundle/EventListener/LoadORMMetadataSubscriber.php
  • memanggil fungsi "class_parents"
  • dalam fungsi "setAssociationMappings"

Jadi perbaikan cepatnya adalah dengan mengomentari acara berlangganan:

/**
 * @return array
 */
public function getSubscribedEvents()
{
//    return array(
//        'loadClassMetadata',
//    );
}

sekarang ketika menjalankan "app/console doktrin:mapping:import" lagi...tidak akan ada error lagi...

juga jika perlu, jalankan perintah pemetaan:konversi dan hasilkan:entitas sebelum mengaktifkan/membatalkan komentar pada Acara yang dilanggani lagi ...

Jika Anda tidak menggunakan Sylius, coba var_dump'ing pada kelas pengecualian Anda ... ada kemungkinan Anda juga mendapatkan beberapa Eventlistner yang mengganggu perintah Impor Doktrin ...

semoga beruntung!

person djaed    schedule 14.04.2015

Perbarui
Kesalahan pertama Anda adalah Anda membuat file yml. Seperti yang dijelaskan dalam buku masak, perintah doctrine:mapping:import sebenarnya menghasilkan berkas tersebut. Singkirkan milik Anda, jalankan perintah, dan biarkan doktrin menghasilkan file itu sendiri.
Apa yang Anda lakukan setelahnya, adalah menghasilkan kelas entitas yang sebenarnya:

php app/console doctrine:mapping:convert annotation ./src
php app/console doctrine:generate:entities DemoFooBundle

Jika tabelnya sendiri belum ada, Anda dapat menggunakan 2 perintah terakhir ini untuk membuat entitas, lalu menjalankannya

php app/console doctrine:schema:update --force

Agar doktrin membuatkan tabel untuk Anda.


Melihat sekilas buku masak memberi tahu saya bahwa nama paket tidak boleh dikutip, dan Anda mungkin ingin meneruskan tanda --force ke perintah doktrin:mapping:import.
Ada di bagian rekayasa balik

php app/console doctrine:mapping:import --force DemoFooBundle yml

Itulah contoh yang diberikan buku masak Symfony2, hanya diubah menjadi format yml, bukan format xml.

Pesan kesalahan mungkin juga terkait dengan nama tabel:

table: users

Dimana entitas tersebut dipanggil

class Users
{}

kemungkinan pertanyaan terkait

person Elias Van Ootegem    schedule 30.06.2014
comment
Ini memberikan kesalahan yang sama persis bahkan setelah mengubah perintah dan mengubah nama tabel ke nama lain. - person Georgi Angelov; 30.06.2014
comment
@GeorgiAngelov: maaf, tidak membaca pertanyaan secara menyeluruh, diperbarui - person Elias Van Ootegem; 30.06.2014
comment
Saya membuang file yml yang dibuat secara manual dan menjalankan perintah. Itu memberi saya kesalahan yang sama persis... Apakah ada file konfigurasi khusus yang perlu disetel agar saya dapat menggunakan doktrin? - person Georgi Angelov; 30.06.2014
comment
@GeorgiAngelov: Coba bersihkan cache doktrin (app/console doctrine:cache:clear-metadata dan clear-query dan clear-result) - person Elias Van Ootegem; 30.06.2014
comment
Saya menjalankan ketiga perintah dan mereka tidak memberikan hasil (tidak ada yang perlu dihapus). Setelah itu saya jalankan perintahnya dan errornya masih ada. - person Georgi Angelov; 30.06.2014
comment
@GeorgiAngelov: Mereka tidak menghasilkan keluaran apa pun , namun bukan berarti mereka tidak melakukan apa pun - person Elias Van Ootegem; 30.06.2014
comment
maaf saya mengedit tanggapan saya. Saya menjalankan perintah setelah itu dan masih memberi saya kesalahan yang sama. - person Georgi Angelov; 30.06.2014
comment
@GeorgiAngelov: Lihat baris 80 dari kelas ExtensionMetadataFactory (jalur ada di pesan kesalahan). Anda akan melihat bahwa kelas sedang dimuat. Anda pasti pernah menggunakan kelas Ambience di suatu tempat. Ada entitas yang diperluas darinya, atau setidaknya disebutkan di suatu tempat. Namun, entitas tersebut tidak ada. IDE setengah layak apa pun akan memungkinkan Anda mencari seluruh proyek untuk menggunakan string, mencari proyek Anda untuk Ambience, dan menentukan kelas, atau mengomentari bit extends - person Elias Van Ootegem; 30.06.2014