2010-01-28 17 views
8

मैं यहाँ परिभाषित में एक वर्ग पुस्तकालय मिल गया है .../ProjectName/पुस्तकालय/Me/Myclass.php परिभाषित इस प्रकार है:Zend फ्रेमवर्क: Autoloading एक कक्षा लाइब्रेरी

<?php 
class Me_Myclass{ 
} 
?> 

मुझे मिल गया है निम्नलिखित bootstrap:

<?php 

/** 
* Application bootstrap 
* 
* @uses Zend_Application_Bootstrap_Bootstrap 
*/ 
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    /** 
    * Bootstrap autoloader for application resources 
    * 
    * @return Zend_Application_Module_Autoloader 
    */ 
    protected function _initAutoload() 
    { 
     $autoloader = new Zend_Application_Module_Autoloader(array(
      'namespace' => 'Default', 
      'basePath' => dirname(__FILE__), 
     )); 
     $autoloader->registerNamespace('Me_'); 
     return $autoloader; 
    } 

    /** 
    * Bootstrap the view doctype 
    * 
    * @return void 
    */ 
    protected function _initDoctype() 
    { 
     $this->bootstrap('view'); 
     $view = $this->getResource('view'); 
     $view->doctype('XHTML1_STRICT'); 
    } 

    /** 
    * Bootstrap registry and store configuration information 
    * 
    * @return void 
    */ 
    protected function _initRegistry() 
    { 
     $config = new Zend_Config_Ini(APPLICATION_PATH . 
             '/configs/application.ini', APPLICATION_ENV, 
             array('allowModifications'=>true)); 
     Zend_Registry::set('configuration', $config); 
    } 

} 

मेरी नियंत्रक में मैं इस तरह वर्ग का दृष्टांत करने की कोशिश:/somethi: जब मैं सीधे http नेविगेट

<?php 
class SomeController extends Zend_Controller_Action 
{ 
    public function indexAction() 
    { 
     $classMaker=new Me_Myclass(); 
    } 
} 
?> 

ng.com/projectname/some?id=1 मुझे निम्न त्रुटि मिलती है:

घातक त्रुटि: क्लास 'Me_Myclass' /home/myuser/work/projectname/application/controllers/SomeController.php में लाइन x पर नहीं मिला

कोई विचार?

संभावित प्रासंगिक मिसेलनी:

autoloader काम करने के लिए जब मैं वर्गों मैं आवेदन/पुस्तकालय के तहत अन्य फ़ोल्डर में परिभाषित किया है के साथ मॉडल का विस्तार कर रहा हूँ लगता है।

किसी ने 'डिफ़ॉल्ट' को बदलने का सुझाव दिया, जिसे मैंने कोशिश की लेकिन यह समस्या को ठीक करने के लिए प्रकट नहीं हुआ और इस नामस्थान का उपयोग करके मॉडल के तोड़ने के नकारात्मक प्रभाव पड़ा।

class Me_Myclass 
{ 
} 

ताकि आप फ़ोल्डर संरचना है अपने पुस्तकालय फ़ोल्डर ऊपर एक स्तर पर ले जाएँ:

/ 
    /application 
    /library 
    /public 

और फिर अपने बूटस्ट्रैप में जोड़ने के लिए निम्नलिखित

उत्तर

12

आप वर्ग के नाम Me_Myclass होने की जरूरत है _initAutoload():

Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_'); 
+0

हैलो, आपके उत्तर के लिए धन्यवाद, मैं इस कोशिश की और नीचे एक त्रुटि प्राप्त। यह क्या इंगित करता है? घातक त्रुटि: संदेश के साथ अपवाद अपवाद 'Zend_Loader_Exception' 'विधि' रजिस्टर नामस्थान 'समर्थित नहीं है' /home/myuser/work/myproject/library/Zend/Loader/Autoloader/Resource.php:128 स्टैक ट्रेस: ​​http: // pastie.org/799074 – user250120

+0

कृपया आपके द्वारा बनाए गए कोड में बदलाव दिखाने के लिए अपना उत्तर अपडेट करें। – smack0007

1

मुझे लगता है कि @ smack0007 का अर्थ है सामग्री की जगह Zend_Loader_Autoloader के साथ आपकी _initAutoload विधि :: getInstance() -> रजिस्टर नामस्थान ('Me_'); तो यह इस तरह दिखता है:

protected function _initAutoload() 
{ 
    Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_'); 
} 
0

सुनिश्चित नहीं हैं कि अगर यह आपकी समस्या है, लेकिन मैं अभी पिछले दिन और आधा खर्च अपने ही समान समस्या पता लगाने की कोशिश (पहली बार विंडोज से यह लोड लिनक्स पर)। बाहर निकलता है मैं अपने पुस्तकालय के फ़ोल्डर नाम मामले में अंधा था।

/library 
    /Tlib 

(* nix पर)

/library 
    /tlib 

कक्षा नाम आम तौर पर इस

class Tlib_FooMe { 
... 
} 

आशा इस कोई है जो इसी तरह अन्यमनस्क है में मदद करता है के रूप में ही नहीं है।

2

आप कॉन्फ़िगरेशन में autoload dir को परिभाषित कर सकते हैं।इस तरह INI फ़ाइल:

autoloaderNamespaces[] = "Me_" 


;You could add as many as you want Classes dir: 
autoloaderNamespaces[] = "Another_" 
autoloaderNamespaces[] = "Third_" 

काम करता है 100%

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