Sınıfı dosya sisteminde taşıdıktan sonra "XXX sınıfı geçerli bir varlık veya eşlenmiş süper sınıf değil"


93

Aib \ PlatformBundle \ Entity \ User.php içinde bir varlık sınıfım vardı

Form sınıfını oluşturmaya çalışırken hiçbir sorun yaşamadım

php uygulaması / konsol doktrini: oluştur: form AibPlatformBundle: Kullanıcı

Şimdi ad alanını Aib \ PlatformBundle \ Entity \ Identity \ User olarak değiştirdim, ancak formu daha önce söylediğim görevle oluşturmaya çalıştığımda:

"Aib \ PlatformBundle \ Entity \ User Sınıfı geçerli bir varlık veya eşlenmiş süper sınıf değil."

Bu dosya içeriğidir:

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

Herhangi bir fikir?

symfony2.0.4


Ad alanlarını güncellemeyi unuttuğunuz, Kullanıcıyı genişleten herhangi bir sınıfınız var mı?
Sorunlu

3
Bildiğim kadarıyla, varlıklarınız için alt ad alanları tanımlamak mümkün değil, çünkü Symfony her zaman AibPlatformBundle: User to Aim \ PlatformBundle \ Entity \ User'ı , ad alanından bağımsız olarak çözümlemeye çalışacaktır .
Alessandro Desantis

Yanıtlar:


228

Bu sorunu yaşadınız - * @ORM\Entityaşağıdaki gibi ek açıklamayı unutmayın :

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

16

Dün bu sorunu yaşadım ve bu konuyu buldum. Varlığı yeni bir pakette eşlemeyle oluşturdum (örn. MyFooBundle / Entity / User.php), tüm yapılandırmayı dokümanlara göre yaptım ancak uygulamayı yüklemeye çalışırken yukarıdan aynı hatayı aldım.

Sonunda MyFooBundle'ı AppKernel'de yüklemediğimi fark ettim:

new My\FooBundle\MyFooBundle()

Bunda hata ayıklamanın harika bir yolu şu komutu çalıştırmaktır:

app/console doctrine:mapping:info

13

Config.yml dosyanızı kontrol edin, şunun gibi bir şey içermelidir:

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

Eşleme listesine kendi grubunuzu ekleyin.


Şerefe !! Yapılandırmamda (Sonata'dan) az önce eşlemeler vardı: ~, herhangi bir paket belirtmeden .. Bunları eklemek manuel olarak sorunumu çözdü :)
shousper

10

Bunu falseikinci parametre olarak 'a geçerek çözdüm Doctrine\ORM\Configuration::newDefaultAnnotationDriver.

Google ve kaynak kodunu araştırmam biraz zaman aldı.

Benim durumum, Symfony kurulumuyla ilgisi olmayan başka bir dizine işaret eden bir eşleştirme kullandığım için özeldi çünkü eski kodu da kullanmak zorundaydım.

Eski varlıkları yeniden düzenledim ve çalışmayı bıraktılar. @AnnotationBunun yerine kullanıyorlardı @ORM\Annotation, bu yüzden yeniden düzenledikten sonra meta verileri okuyamadı. Basit bir ek açıklama okuyucusu kullanmayarak, her şey yolunda görünüyor.


9

Benim durumumda sorun benim sunucular önbellek değiştirerek çözüldü eAccelerator için APC . Görünüşe göre eAccelerator, notlarınızı bozan dosyalardan tüm yorumları çıkarıyor.


Opcache'nin yorum sıyırmayı devre dışı bırakmak için bir ayarı opcache.save_comments=1vardır, belki eAccelerator / APC için de bir tane vardır?
Oylex

9

Oluştururken bu sorunu $useSimpleAnnotationReader=falseçözdüm MetaDataConfiguration.


7

Mark Fu ve mogoman için büyük teşekkürler

Config.yml'de bir yerde olması gerektiğini biliyordum ... ve bunu

app/console doctrine:mapping:info

gerçekten yardımcı oldu!

Aslında, bu komut sadece bir hatada durur ... geri bildirim yok, ancak her şey yolunda olduğunda, tüm varlıklarınızı listelenmiş olarak görebilmelisiniz.


3

Paketin Resources / config / doctrine klasöründeki çakışan otomatik oluşturulmuş orm.php dosyasını silerek aynı istisnayı çözdüm; belgelere göre: "Bir paket yalnızca bir meta veri tanımlama biçimini kabul edebilir. Örneğin, YAML meta veri tanımlarını ek açıklamalı PHP varlık sınıfı tanımlarıyla karıştırmak mümkün değildir."


Teşekkür ederim. Bana çok zaman kazandırdın. Bu hatayı php biçimli bir Varlık oluşturduktan sonra, onu sildikten ve aynı ada sahip yeni bir açıklamalı varlık oluşturduktan sonra aldım.
iMx

1

PHP 5.3.16'ya sahip olma olasılığınız çok yüksek (Symfony 2.x onunla çalışmayacaktır). Her neyse, http://you.site.name/config.php adresinde kontrol sayfasını yüklemelisiniz Eğer hosting sunucusunda projeniz çalışmadıysa, "config.php" içindeki sonraki satırlar kaldırılmalıdır:

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

İyi şanslar!


0

Benim durumumda, bir refactor sırasında çok kıskançtım ve bir doktrin yml dosyasını silmiştim!


0

Mac'imde benim durumumda src / MainBundle / Resource / Config / Doctrine kullanıyordum, tabii ki Mac'te çalıştı ancak üretim Ubuntu sunucusunda çalışmadı. Config'i config ve Doctrine'i doctrine olarak yeniden adlandırdıktan sonra, eşleme dosyaları bulundu ve çalışmaya başladı.


-1

Sadece uygulama / konsol yerine app / console_dev kullanarak sizin durumunuzdaki aynı hata mesajından kurtuldum

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.