2012-03-01 10 views
9

मैं Symfony2 उपयोग कर रहा हूँ और नाम मिला जब मैं स्कीमा ($ php एप्लिकेशन/कंसोल सिद्धांत: उत्पन्न: स्कीमा) जनरेट करने का प्रयास मैं एक त्रुटि मिली ..Symfony2 त्रुटि: कोई मैपिंग फ़ाइल

 

    [Doctrine\ORM\Mapping\MappingException]                    
     No mapping file found named 'xxx.UserBundle.Entity.User.php' for class 'xxx\UserBundle\Entity\User'. 

मैं केवल proyect में 2 बंडल है:

  • UserBundle
  • FileBundle

मैं यू के साथ FileBundle कनेक्ट इस कोड के साथ serBundle:

 

    
    /** 
    * @ORM\ManyToOne(targetEntity="xxx\UserBundle\Entity\User") 
    **/ 
    protected $user;  
 

फ़ाइलों के हेडर कुछ इस तरह हैं:

 

    
    namespace xx\UserBundle\Entity; 

    use Doctrine\ORM\Mapping as ORM; 

    /** 
    * @ORM\Entity 
    **/ 
    class User 
    { ###...###} 
 

FileBundle बहुत समान है .. धन्यवाद!

+0

मैं 'xxx' मान लेते हैं और' सिर्फ प्रतिस्थापन xx' रहे हैं, वे कर रहे हैं? –

+0

हां, उस – quique150

+0

के लिए खेद है मैंने जवाब जोड़ा ... लेकिन यह एक लंबा शॉट है :) –

उत्तर

0

मैं ऐसा क्यों नहीं कर सकता कि यह क्यों हो रहा है लेकिन मैं यहां एक छलांग लगाऊंगा।

अपने config.yml को संपादित करने का प्रयास करें। doctrine अनुभाग इस तरह दिखना चाहिए:

doctrine: 
    dbal: 
     default_connection: my_connection_name 
     connections: 
      fmefb: 
       host:  %database_host% 
       dbname: %database_name% 
       user:  %database_user% 
       password: %database_password% 
       driver: %database_driver% 
       port:  %database_port% 
       charset: UTF8 

    orm: 
     default_entity_manager: my_entity_manager 
     entity_managers: 
      my_entity_manager: 
       connection: my_connection_name 
       mappings: 
        CompanyNameSiteBundle: ~ 
        CompanyNameAdminBundle: ~ 
        CompanyNameSomethingElse: ~ 

सूचना तल पर mappings सूची। "बंधा" वाले सभी बंडल यहां शामिल हैं।

आशा इस मदद करता है ....

+0

मैं $ php ऐप/कंसोल सिद्धांत का उपयोग करता हूं: मैपिंग: जानकारी इकाई प्रबंधक डिफ़ॉल्ट में मैप किए गए 1 इकाइयां मिली: [ठीक] xx \ फ़ाइलबंडल \ Entity \ फ़ाइल, कोई विचार? – quique150

4

यह है कि आप ORM और नहीं AnnotationDriver के लिए PHPDriver उपयोग कर रहे हैं, के बाद से कक्षाओं में अपने डेटाबेस जानकारी एनोटेशन में है किसी भी तरह मेरे लिए अजीब है।

किसी भी तरह, यदि php app/console doctrine:mapping:info कमांड आपको केवल 1 इकाई देता है जिसका अर्थ है कि उपयोगकर्ता श्रेणी वाले आपके अन्य बंडल को ऐप/AppKernel.php फ़ाइल में लोड नहीं किया गया है। registerBundles() समारोह में $bundles सरणी के लिए लाइन

new xxx\UserBundle\xxxUserBundle(), 

जोड़कर अपने UserBundle लोड करें। उसके बाद, यह समारोह कुछ इस तरह दिखना चाहिए:

public function registerBundles() 
{ 
    $bundles = array(
     new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 
     new Symfony\Bundle\SecurityBundle\SecurityBundle(), 
     new Symfony\Bundle\TwigBundle\TwigBundle(), 
     new Symfony\Bundle\MonologBundle\MonologBundle(), 
     new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), 
     new Symfony\Bundle\DoctrineBundle\DoctrineBundle(), 
     new Symfony\Bundle\AsseticBundle\AsseticBundle(), 
     new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), 
     new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(), 
     new xx\FileBundle\xxFileBundle(), 
     new xxx\UserBundle\xxxUserBundle(), 
    ); 

    if (in_array($this->getEnvironment(), array('dev', 'test'))) { 
     $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 
     $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 
     $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 
    } 

    return $bundles; 
} 
बेशक

, परिवर्तन आपके वास्तविक नाम के साथ 'xx' और 'xxx'।

उम्मीद है कि इससे मदद मिलती है।

26

आप सिद्धांत मैपिंग स्वरूप मिश्रण कर रहे हैं, तो आप एनोटेशन और संसाधन/config/सिद्धांत

में कम से कम एक एक्सएमएल फ़ाइल सिम्फोनी डॉक्स से है:

"A bundle can accept only one metadata definition format. For example, 
it's not possible to mix YAML metadata definitions with annotated PHP 
entity class definitions." 

तो समाधान है:

आप किसी दिए गए बंडल में विभिन्न सिद्धांत मैपिंग प्रारूपों को मिश्रित नहीं कर सकते हैं। तो या तो सभी इकाइयों के लिए एनोटेशन का उपयोग करें या सभी के लिए एक्सएमएल का उपयोग करें।

+0

इसने मेरी समस्या हल की और यह अभी भी सिम्फनी 2.1 में एक मान्य प्रतिबंध है, symfony.com/doc/2.1/book/doctrine.html#add-mapping- जानकारी देखें। धन्यवाद –

+0

ईमानदारी से धन्यवाद। इसने मुझे कई डीबगिंग घंटे बचाया। मैं फिर से वस्तुओं की ऑटो पीढ़ी का उपयोग नहीं करूंगा –

3

मैं @ilanco 100% से सहमत हूं। इसके अलावा, समाधान किसी भी को हटाने के लिए है।फ़ोल्डर में xml फ़ाइल, उदाहरण के लिए:

C:\xampp\htdocs\localxyz\src\AppBundle/Resources/config/doctrine/Comment.orm.xml

इन एक्सएमएल बनाया जब आप इस तरह के आदेश चला फ़ाइलें:

C:\xampp\htdocs\localxyz>php app/console doctrine:mapping:import --force AppBundle xml

गोबर।

1

शुभ दिन,

हालांकि मुझे पता है कि इस साल पहले नियुक्त किया गया है, लेकिन सिर्फ यहाँ मेरा उत्तर पोस्ट करने के लिए पसंद करेंगे, शायद यह मदद कर सकता है किसी को :)

बस कैश को साफ़ यह, मेरे लिए काम करता है, हालांकि

php bin/console cache:clear 

धन्यवाद

संबंधित मुद्दे