2013-10-11 8 views
5

मैं इस लेख पढ़ रहा था:Symfony2 - सिद्धांत: स्कीमा: अद्यतन संस्था के साथ एक बंडल (decoupled) के बाहर विफल रहता है

http://danielribeiro.org/yes-you-can-have-low-coupling-in-a-symfony-standard-edition-application/

लेखक उल्लेख किया है कि यह परियोजना के लिए artitcture इस तरह का बनाना संभव है :

src/ 
└── Vendor/ 
    └── Product/ 
     └── Bundle 
      └── BlogBundle/ 
      └── ForumBundle/ 
      └── SiteBundle/ 
       └── Controller/ 
        └── IndexController.php 
       └── Resources/ 
        └── views/ 
         └── index.html.twig 
       └── ProductSiteBundle.php 
     └── Entity 
      └── User.php 
     └── Repository 
      └── UserRepository.php 
     └── Service 
      └── UserPasswordRetrievalService.php 

तो मैं लेख पीछा किया और कुछ इस तरह के साथ अंत:

src/ 
└── Product/ 
    └── Bundle 
     └── SiteBundle/ 
      └── Controller/ 
       └── IndexController.php 
      └── Resources/ 
       └── views/ 
        └── index.html.twig 
      └── ProductSiteBundle.php 
    └── Entity 
     └── User.php 

अब Symfony मेरी User.php नहीं देख सकते हैं लेखक अगर मैं इस काम करता है बनाने के लिए किसी भी अतिरिक्त कोड नहीं जोड़ सकते जिक्र नहीं किया था, और अब मैं इस त्रुटि हो रही है:

MappingException: The class 'Product\Entity\User' was not found in the chain configured namespaces OtherNameSpaces 

अद्यतन

इसलिए मैंने अपना मौजूदा कोड हटा दिया। और कुछ इस तरह था:

src/ 
└── Product/ 
    └── Bundle 
     └── SiteBundle/ 
      └── Controller/ 
       └── IndexController.php 
      └── Resources/ 
       └── views/ 
        └── index.html.twig 
      └── ProductSiteBundle.php 
    └── Entity 
     └── User.php 

User.php

namespace Product\Entity; 

/** 
* @ORM\Entity 
* @ORM\Table(name="users") 
*/ 
class User 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    public function __construct() 
    { 
     parent::__construct(); 

    } 
} 

और फिर

php app/console doctrine:schema:update --force //No Metadata Classes to process. 

ऐसा लगता है Symfony बिल्कुल उस फ़ोल्डर के बारे में पता नहीं है। क्या कोई ऐसी जगह है जहां मैं उस फ़ोल्डर के अंदर देखने के लिए सिम्फनी से पूछ सकता हूं?

+0

User.php में अपने नाम स्थान क्या है? – Tib

+0

'नामस्थान उत्पाद \ Entity' @Tib – trrrrrrm

+0

@nifr उत्तर इसके शीर्ष पर सही है। मेरा आलेख, जहां आपने पहली बार इस अभ्यास के बारे में सुना है, यह समझ में नहीं आता है कि आप इसे आंतरिक रूप से कैसे करते हैं। –

उत्तर

11

जैकब जलास द्वारा good blog article बताता है कि बंडलों के बाहर रहने वाली संस्थाओं को कैसे मैप करना है।

आपको मैन्युअल रूप से जोड़ना होगा कि कहां दिखाया गया है मैपिंग जानकारी के लिए कहां देखेंगे।

इससे मैपिंग जानकारी doctrine:schema:update कमांड के लिए उपलब्ध है। कॉन्फ़िगरेशन परिवर्तन के बाद अपने कैश को साफ़ करना न भूलें।

# app/config/config.php 
doctrine: 
    orm: 
     # ... 
     mappings: 
      Acme: 
       type: annotation 
       is_bundle: false 
       dir: %kernel.root_dir%/../src/Acme/Entity 
       prefix: Acme\Entity 
       alias: Acme 

अब आप (उर्फ परिभाषा की वजह से) इस तरह भंडार का उपयोग कर सकते हैं:

$entityManager->getRepository('Acme:YourEntity'); 
+0

पूरी तरह से काम किया, धन्यवाद! – trrrrrrm

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