Saya memiliki kelas entitas di Aib \ PlatformBundle \ Entity \ User.php
Saya tidak punya masalah mencoba membuat kelas bentuknya melalui
doktrin aplikasi / konsol php: menghasilkan: bentuk AibPlatformBundle: Pengguna
Sekarang saya telah mengubah namespace menjadi Aib \ PlatformBundle \ Entity \ Identity \ User, tetapi ketika saya mencoba membuat formulir dengan tugas yang saya katakan sebelumnya mengatakan:
"Kelas Aib \ PlatformBundle \ Entity \ Pengguna bukan entitas yang valid atau kelas super yang dipetakan."
Ini adalah isi 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
php
symfony
doctrine-orm
ziiweb
sumber
sumber
Jawaban:
Punya masalah ini - jangan lupa anotasi
* @ORM\Entity
seperti di bawah ini:/** * Powma\ServiceBundle\Entity\User * * @ORM\Entity * @ORM\Table(name="users") */
sumber
Mengalami masalah ini kemarin dan menemukan utas ini. Saya membuat entitas dengan pemetaan dalam bundel baru (misalnya 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 terbaik untuk men-debug ini adalah dengan menjalankan perintah ini:
sumber
Periksa file config.yml Anda, harus berisi 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.
sumber
Saya menyelesaikan ini dengan meneruskan
false
sebagai parameter kedua keDoctrine\ORM\Configuration::newDefaultAnnotationDriver
.Saya 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 lama.
Saya telah merefaktor entitas lama dan mereka berhenti bekerja. Mereka biasanya menggunakan
@Annotation
alih-alih@ORM\Annotation
, jadi setelah pemfaktoran ulang itu gagal membaca metadata. Dengan tidak menggunakan pembaca anotasi sederhana, semuanya tampak baik-baik saja.sumber
Dalam kasus saya, masalahnya diselesaikan dengan mengubah cache server saya dari eAccelerator ke APC . Rupanya eAccelerator menghapus semua komentar dari file yang merusak anotasi Anda.
sumber
opcache.save_comments=1
, mungkinkah ada juga untuk eAccelerator / APC?Saya menyelesaikan masalah ini dengan mengatur
$useSimpleAnnotationReader=false
saat membuat fileMetaDataConfiguration
.sumber
terima kasih banyak untuk Mark Fu dan mogoman
Saya tahu itu pasti ada di suatu tempat di config.yml ... dan bisa mengujinya terhadap file
sangat membantu!
Faktanya, perintah ini hanya berhenti saat terjadi kesalahan ... tidak ada umpan balik, tetapi ketika semuanya baik-baik saja, Anda seharusnya dapat melihat semua entitas Anda terdaftar.
sumber
Saya menyelesaikan pengecualian yang sama dengan menghapus file orm.php yang dibuat secara otomatis dan berkonflik di folder Resources / config / doktrin bundel; menurut dokumentasi: "Sebuah paket hanya dapat menerima satu format definisi metadata. Misalnya, tidak mungkin mencampur definisi metadata YAML dengan definisi kelas entitas PHP beranotasi."
sumber
Kemungkinan besar Anda memiliki PHP 5.3.16 (Symfony 2.x tidak akan berfungsi dengannya). Bagaimanapun Anda harus memuat halaman periksa di http://you.site.name/config.php Jika Anda memiliki proyek yang tidak bekerja di 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!
sumber
Dalam kasus saya, saya terlalu bersemangat selama refactor dan telah menghapus file yml doktrin!
sumber
Dalam kasus saya di mac saya, saya menggunakan src / MainBundle / Resource / Config / Doctrine, tentu saja ini berfungsi di Mac tetapi tidak berfungsi di server produksi Ubuntu. Setelah berganti nama Config menjadi config dan Doctrine menjadi doktrin, file pemetaan ditemukan dan mulai bekerja.
sumber
Saya menghilangkan pesan kesalahan yang sama seperti dalam kasus Anda dengan menggunakan app / console_dev, bukan hanya app / console
sumber