2011-06-06 5 views
7

ऑटोलोडर श्रेणी सुविधा (जैसे Symfony 2.0) के लिए सिम्फनी 1.4 में नेमस्पेस (PHP 5.3 के साथ) को कैसे पंजीकृत करें?सिम्फनी 1.4 के ऑटोलोडर के साथ नामांकित कक्षाएं लोड हो रही हैं?

+0

क्या आप अंततः नेमस्पेस के साथ काम कर रहे सिम्फनी 1.4 ऑटोलोडिंग प्राप्त करने में सक्षम थे?यदि हां, तो क्या आप मुझे बता सकते हैं कि कैसे? –

उत्तर

10

आप Symfony 1.4 ढांचे में Symfony2 से Autoloader उपयोग कर सकते हैं।

1. कॉपी Symfony2 अपने Symfony 1.4 सैंडबॉक्स परियोजना के विक्रेता निर्देशिका के लिए classloaders:

SF_ROOT_DIR/lib/विक्रेता/Symfony2/src/Symfony/घटक/classloader/UniversalClassLoader.php

SF_ROOT_DIR/lib/विक्रेता/Symfony2/src/Symfony/घटक/classloader/ApcUniversalClassLoader.php

2. अपने एस संशोधित F_ROOT_DIR/config/ProjectConfiguration.class.php फ़ाइल इस प्रकार है:

require_once dirname(__FILE__) . '/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php'; 
require_once dirname(__FILE__) . '/../lib/autoload/sfClassLoader.class.php'; 
sfCoreAutoload::register(); 

class ProjectConfiguration extends sfProjectConfiguration { 

    public function setup() { 
     $this->namespacesClassLoader(); 
     $this->enablePlugins('sfDoctrinePlugin'); 
    } 

    public function namespacesClassLoader() { 
     if (extension_loaded('apc')) { 
      $loader = new ApcUniversalClassLoader('S2A'); 
     } else { 
      $loader = new UniversalClassLoader(); 
     } 
     $loader->registerNamespaces(array(
      'Pohon' => __DIR__ . '/../lib/vendor/Pohon/src')); 
     $loader->register(); 
    } 

} 

3. रजिस्टर वांछित नामस्थान:
जैसे। मैं कक्षा लोड करना चाहता हूं:

पोहोन \ उपकरण \ स्ट्रिंग \ Utils \ Slugify।

फ़ाइल का नाम होना चाहिए:

SF_ROOT_DIR/lib/विक्रेता/Pohon/src/Pohon/उपकरण/स्ट्रिंग/Utils/Slugify.php

और पंजीकृत नाम स्थान इस प्रकार है:

Pohon => SF_ROOT_DIR/lib/विक्रेता/Pohon/src

+0

ऑटोलोडर प्रोजेक्ट यहां पाया जा सकता है: https://github.com/Symfony-Plugins/sfClassLoaderPlugin। –

+0

Breautiful, धन्यवाद! मुझे 'सिम्फनी \ घटक \ क्लासलोडर \ UniversalClassLoader का उपयोग करना पड़ा; सिम्फनी \ घटक \ क्लासलोडर \ ApcUniversalClassLoader का उपयोग करें; 'ProjectConfiguraration.class.php फ़ाइल में आयात के बाद। साथ ही, क्लासलोडर बंडल का लिंक यहां दिया गया है (इन वर्गों को बहिष्कृत करने से पहले): https://github.com/symfony/ClassLoader/tree/2.6 – GermanK

1

सिम्फनी spl_autoload_register() फ़ंक्शन का उपयोग अपने स्वयं के ऑटोलोडर (sfAutoload) को पंजीकृत करने के लिए करता है।

आप अपने परियोजना/आवेदन/प्लगइन का initialize() समारोह में अपने स्वयं के हैंडलर रजिस्टर कर सकते हैं। (जो भी लागू होता है)।

यह, उदाहरण के लिए, यह भी क्या Swift_Mailer प्लगइन करता है: यह अपने आप ही autoloader जब जरूरत पंजीकृत करता है।

5

आप Composer का उपयोग कर सकते हैं और यह बहुत आसान है। बस आपकी मशीन पर इसे स्थापित (आप शायद पहले से ही के बाद से यह 2015 है है) और अपने प्रोजेक्ट फ़ोल्डर में चलाएँ:

composer init 

फिर आप सभी संकुल आप संगीतकार के साथ करना चाहते हैं और अपने ProjectConfiguration.class.php में सिर्फ इस लाइन में शामिल हैं स्थापित कर सकते हैं:

require_once __DIR__.'/../vendor/autoload.php'; 

ध्यान दें कि रास्तों यदि आप डिफ़ॉल्ट Symfony1.4 निर्देशिका संरचना बदल भिन्न हो सकती है।

+0

सिम्फनी 1.4 पता नहीं है कि नामस्थान के भीतर कक्षाएं कैसे लोड करें, आपको लागू करना होगा यह सुविधा। संगीतकार सिर्फ एक पैकेज/lib प्रबंधक है। –

+1

संगीतकार एक क्लासलोडर भी प्रदान करता है और जब आप इंस्टॉल करते हैं (संगीतकार स्लैंग "आवश्यकताएँ" का उपयोग करने के लिए) पैकेज के साथ आपको बस इतना करना है कि उपरोक्त 'विक्रेता/autoload.php' स्क्रिप्ट शामिल है। संगीतकार स्थापित पैकेजों में नामस्थानों को मैप करने का ख्याल रखता है, उनमें से सभी। या तुमने कोशिश की? मैं ऐसा करता हूं और यह काफी अच्छी तरह से काम करता है। – ggioffreda

+0

इस समाधान के लिए धन्यवाद, यह मेरे लिए काम करता है। आपको विक्रेता-डीआईआर निर्दिष्ट करने की आवश्यकता है: एसएफ 1.4 के मूल विक्रेता डीआईआर में पुस्तकालयों के लिए "lib/विक्रेता"; एएम पुस्तकालय के लिए इस्तेमाल किया और यह ठीक काम करता है। – Naeh

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