2012-01-20 28 views
9

मेरे मानक सिम्फनी 2-ऐप में मुझे कुछ इकाइयों के साथ बंडलों का एक गुच्छा है। इनमें से कुछ इकाइयां मानक फ़ोल्डर में स्थित नहीं हैं, सिद्धांत के स्वैपिंग को पता चला है (उदा। /src/Acme/DemoBundle/Entities) लेकिन एक अलग स्थान पर।क्या कॉन्फ़िगरेशन फ़ाइल के बाहर सिद्धांत के लिए इकाई मैपिंग कॉन्फ़िगरेशन को संशोधित करने का कोई तरीका है?

मैं आसानी से इस तरह एक अलग स्थान का उपयोग करने के सिद्धांत को बताने के लिए config.yml इस्तेमाल कर सकते हैं:

doctrine: 
    orm: 
     auto_mapping: false 
     mappings: 
      AcmeDemoBundle: 
       type: annotation 
       prefix: Acme\DemoBundle\Entities\ 
       dir: %kernel.cache_dir%\Acme\DemoBundle\Entities 

यह काम करता है। लेकिन कहें कि मेरे पास config.yml एक अलग मैपिंग के साथ 10 बंडल हैं जो बहुत तेज़ हो जाते हैं। क्या कोई और तरीका है, उदा। एक कंपाइलरपास के साथ या निर्भरता इंजेक्शन के माध्यम से, तो मुझे अपने config.yml में सभी इकाइयों को जोड़ने की आवश्यकता नहीं है? मैंने पहले ही में देखा है, लेकिन अब तक कोई भाग्य नहीं था।

+0

मैं config.yml में मैपिंग को कॉन्फ़िगर करने के तरीके की तलाश में था। धन्यवाद :) – flu

उत्तर

2

अपने आप को जवाब देने के लिए:

सबसे आसान तरीका autoloading समायोजित करने के लिए है, सेटिंग्स को संशोधित करने की कोई जरूरत नहीं है। autoload.php में Symfony के मानक वितरण में आप registerNamespace-विधि के लिए किसी अन्य स्थान जोड़ने के लिए:

$loader->registerNamespaces(array(
    [...] 
    'Foo' => array(__DIR__.'/../src/dirA', __DIR__.'/../src/dirB') 
)); 

सिद्धांत तो पहले Dira में और उसके बाद "फू" नाम स्थान में संस्थाओं के लिए दिखेगा dirB में अगर नहीं मिला।

0

आप imports

# yaml 
imports: 
    - { resource: entities.yml } 

<!-- xml --> 
<imports> 
    <import resource="enditites.xml" /> 
</imports> 

// PHP 
$loader->import('entities.php'); 

का उपयोग कर आप एक भी फ़ाइल प्रकार से चिपके की जरूरत नहीं है अन्य विन्यास फाइल शामिल कर सकते हैं। एक उदाहरण के लिए, एक yaml फ़ाइल में एक एक्सएमएल विन्यास फाइल आयात करना संभव है।

+0

लेकिन मुझे मैन्युअल रूप से कॉन्फ़िगरेशन को जोड़ना होगा। मैं प्रोग्रामेटिक तरीके से ढूंढ रहा हूं। – acme