2012-08-20 21 views
8

में एक वर्ग को स्वत: लोड करना मैं सिम्फनी 1.2 प्रोजेक्ट को सिम्फनी 2.x पर पोर्ट कर रहा हूं। मैं वर्तमान में नवीनतम 2.1.0-देव रिलीज चला रहा हूं।सिम्फनी 2.1

मेरी पुरानी परियोजना से मेरे पास टूल्स नामक एक वर्ग है जिसमें स्ट्रिंग्स में मंगिंग सरणी जैसी चीजों के लिए कुछ सरल कार्य होते हैं और तारों से स्लग उत्पन्न करते हैं। मैं इस कक्षा का उपयोग अपनी नई परियोजना में करना चाहता हूं लेकिन मुझे अस्पष्ट नहीं है कि इस कक्षा का उपयोग बंडल के बाहर कैसे किया जाए।

मैंने यहां विभिन्न उत्तरों को देखा है जो ऐप/autoload.php बदलने की सलाह देते हैं लेकिन मेरा autoload.php उत्तर में से अलग दिखता है, शायद 2.0 और 2.1 के बीच कुछ बदल गया है।

मैं अपनी कक्षा को मेरे स्रोत या ऐप निर्देशिका में रखना चाहता हूं क्योंकि वे स्रोत नियंत्रण में हैं। मेरी विक्रेता निर्देशिका नहीं है क्योंकि मैं इसका ख्याल रखने के लिए संगीतकार का उपयोग कर रहा हूं।

किसी भी सलाह की सराहना की जाएगी।

उत्तर

7

इस तरह के एक साधारण मामले के लिए सबसे तेज़ समाधान एक फ़ोल्डर बना रहा है (उदाहरण के लिए Common) सीधे src के तहत और अपनी कक्षा को इसमें डाल दें।

src 
    -- Common 
    -- Tools.php 

Tools.php अपने समारोह कॉल करने से पहले उदाहरण

<?php 

namespace Common; 

class Tools 
{ 
    public static function slugify($string) 
    { 
     // ... 
    } 
} 

के लिए, उचित नाम स्थान के साथ अपने वर्ग में शामिल मत भूलना use बयान

use Common\Tools; 

// ... 
Tools::slugify('my test string'); 

आप निम्नलिखित src के तहत अपने कोड डाल दिया उपरोक्त के रूप में उचित फ़ोल्डर संरचना और नामस्थान, यह app/autoload.php को छूए बिना काम करेगा।

<?php 

use Doctrine\Common\Annotations\AnnotationRegistry; 

$loader = require __DIR__.'/../vendor/autoload.php'; 
$loader->add('YOURNAMESPACE', __DIR__.'/../vendor/YOURVENDOR/src'); 


// intl 
if (!function_exists('intl_get_error_code')) { 
    require_once _DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php'; 

    $loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs'); 
} 

AnnotationRegistry::registerLoader(array($loader, 'loadClass')); 

return $loader; 

बस अपने मूल्यों के साथ YOURNAMESPACE और YOURVENDOR बदल देते हैं:

+0

बहुत बढ़िया, मैंने अपनी कक्षा को लिब \ टूल्स और सिम्फनी में ठीक से ऑटोलोड किया। चीयर्स! –

+0

यह मेरे लिए काम नहीं करता है। मैंने यहां कारण पूछा http://stackoverflow.com/questions/19652384/symfony2- कस्टम-class-not-found। कृपया मदद करें अगर आपको पता है कि यह –

12

एक और तरीका है /app/config/autoload.php उपयोग करने के लिए है। अब तक मेरे लिए काफी अच्छा काम करता है।

आप सही हैं, मैंने 2.0 से 2.1 तक ऑटोलोड में बदलावों पर ठोकर खाई। उपरोक्त कोड नवीनतम संस्करण के साथ ठीक काम करता है, जिस पर मैंने अपनी परियोजना को अपग्रेड किया ;-)

+3

+1 क्यों काम नहीं करता है! आखिर में पाया कि मैं क्या देख रहा था। यह सिम्फनी डॉक्टर में जाना चाहिए। – Mick

+1

क्या यह अभी भी कस्टम पीएसआर -0 अनुपालन विक्रेता पुस्तकालयों को लोड करने का उचित तरीका है जो पैकेजिस्ट का हिस्सा नहीं हैं? –

+1

नहीं, यह नहीं है ... क्योंकि ऑटोलोड अब संगीतकार द्वारा जेनरेट किए गए ऑटोलोडर के माध्यम से किया जाता है, विक्रेता में आपके सभी नामांकित कक्षाएं उपलब्ध होनी चाहिए। – maschmann

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