"क्लास एक्सएक्सएक्स सिस्टम में क्लास को स्थानांतरित करने के बाद क्लास एक्सएक्सएक्स एक वैध इकाई या मैप्ड सुपर क्लास नहीं है"


91

मेरे पास Aib \ PlatformBundle \ Entity \ User.php में एक इकाई वर्ग था

मुझे इसके फॉर्म क्लास को बनाने में कोई समस्या नहीं हुई

php ऐप / कंसोल सिद्धांत: उत्पन्न: AibPlatformBundle: उपयोगकर्ता

अब मैंने नाम स्थान को 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


क्या आपके पास उपयोगकर्ता को विस्तारित करने वाली कोई कक्षाएं हैं जिनके लिए आप नामस्थान अपडेट करना भूल गए हैं?
समस्यात्मक

3
जहाँ तक मुझे पता है, यह संभव नहीं अपने संस्थाओं के लिए subnamespaces परिभाषित करने के लिए, के बाद से Symfony हमेशा हल करने का प्रयास करेंगे उपयोगकर्ता: AibPlatformBundle के उद्देश्य \ PlatformBundle \ इकाई \ उपयोगकर्ता , अपने नाम स्थान की परवाह किए बिना।
एलेसेंड्रो डेसेंटिस

जवाबों:


227

यह समस्या थी - * @ORM\Entityनीचे दिए गए एनोटेशन को न भूलें :

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

15

कल यह समस्या थी और यह धागा मिला। मैंने एक नए बंडल (जैसे MyFooBundle / Entity / User.php) में मैपिंग के साथ इकाई बनाई, डॉक्स के अनुसार सभी कॉन्फ़िगरेशन किए, लेकिन ऐप को लोड करने का प्रयास करते समय ऊपर से समान त्रुटि मिली।

अंत में मुझे एहसास हुआ कि मैं MyFooBundle को AppKernel में लोड नहीं कर रहा था:

new My\FooBundle\MyFooBundle()

डीबग करने का एक शानदार तरीका है इस कमांड को चलाना:

app/console doctrine:mapping:info

13

अपनी 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: ~

मैपिंग सूची में अपना खुद का बंडल जोड़ें।


चीयर्स !! मेरा विन्यास (सोनाटा से) सिर्फ मैपिंग था: ~, किसी भी बंडलों को निर्दिष्ट नहीं करना .. उन्हें मैन्युअल रूप से जोड़ना मेरे मुद्दे को निर्धारित किया :)
shousper

10

मैंने इसे falseदूसरे पैरामीटर के रूप में पास करके हल किया Doctrine\ORM\Configuration::newDefaultAnnotationDriver

Google और स्रोत कोड के माध्यम से खुदाई करने में मुझे कुछ समय लगा।

मेरा मामला तब से विशेष था जब मैं सिम्फनी इंस्टॉलेशन से असंबंधित किसी अन्य निर्देशिका की ओर मैपिंग का उपयोग कर रहा था क्योंकि मुझे भी विरासत कोड का उपयोग करना था।

मैंने विरासत संस्थाओं को वापस कर दिया था और उन्होंने काम करना बंद कर दिया था। वे @Annotationइसके बजाय उपयोग करते थे @ORM\Annotation, इसलिए इसे वापस करने के बाद बस मेटाडेटा पढ़ने में विफल रहा। एक सरल एनोटेशन रीडर का उपयोग नहीं करने से, सब कुछ ठीक लगता है।


8

मेरे मामले में समस्या को मेरे सर्वर कैश को eAccelerator से APC में बदलकर हल किया गया था । जाहिरा तौर पर eAccelerator उन फाइलों की सभी टिप्पणियों को हटा देता है जो आपके एनोटेशन को तोड़ती हैं।


Opcache में टिप्पणी स्ट्रिपिंग को अक्षम करने के लिए एक सेटिंग है opcache.save_comments=1, शायद eAccelerator / APC के लिए एक भी है?
ओलेक्सलेक्स

8

मैंने इस समस्या को हल करते $useSimpleAnnotationReader=falseसमय सेटिंग करके हल किया MetaDataConfiguration


7

मार्क फू और mogoman के लिए बड़ा thx

मुझे पता था कि यह config.yml में कहीं होना था ... और इसके खिलाफ परीक्षण करने में सक्षम होने के नाते

app/console doctrine:mapping:info

वास्तव में मदद की!

वास्तव में, यह कमांड बस एक त्रुटि पर रुक जाती है ... कोई प्रतिक्रिया नहीं, लेकिन जब सब कुछ ठीक हो जाता है तो आपको सूचीबद्ध सभी संस्थाओं को देखने में सक्षम होना चाहिए।


3

मैंने बंडल के संसाधन / कॉन्फ़िगरेशन / सिद्धांत फ़ोल्डर में एक परस्पर विरोधी ऑटोगेनेरेटेड orm.php फ़ाइल को हटाकर उसी अपवाद को हल किया; दस्तावेज़ीकरण के अनुसार: "एक बंडल केवल एक मेटाडेटा परिभाषा प्रारूप को स्वीकार कर सकता है। उदाहरण के लिए, एनमोटेटेड PHP इकाई वर्ग परिभाषाओं के साथ YAML मेटाडेटा परिभाषाओं को मिश्रण करना संभव नहीं है।"


धन्यवाद। आपने मुझे बहुत समय बचाया। इकाई त्रुटि स्वरूपित करने के बाद यह त्रुटि हुई, इसे हटाए जाने और उसी नाम से एक नई एनोटेट इकाई बनाने के लिए।
18x पर iMx

1

बहुत अधिक संभावना है कि आपके पास PHP 5.3.16 है (सिम्फनी 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.');
}

सौभाग्य!


0

मेरे मामले में, मैं एक परावर्तक के दौरान बहुत जोश में था और एक डॉक्ट्रीन yml फ़ाइल को हटा दिया था!


0

मेरे मैक पर मेरे मामले में मैं src / MainBundle / संसाधन / config / Doctrine का उपयोग कर रहा था, बेशक यह मैक पर काम करता था लेकिन यह उत्पादन Ubuntu सर्वर पर काम नहीं करता था। एक बार जब नाम का विन्यास और सिद्धांत से सिद्धांत तक का नाम बदल दिया गया, तो मैपिंग फाइलें मिल गईं और इसने काम करना शुरू कर दिया।


-1

मुझे आपके ऐप की तरह ही ऐप / कंसोल_देवी का उपयोग करके आपके केस के समान त्रुटि संदेश से छुटकारा मिल गया

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.