Zend Framework: Sınıf Kütüphane autoloading

4 Cevap php

Burada tanımlandığı ... / olarak tanımlanan projectname / library / Me / Myclass.php izlediği bir sınıf kitaplığı var:

<?php
class Me_Myclass{
}
?>

Ben şu ön yükleme var:

<?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);
    }

}

Benim denetleyicisi böyle sınıf örneğini deneyin:

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

Ben http:/something.com/projectname/some?id=1 doğrudan gezinmek zaman aşağıdaki hatayı alıyorum:

Ölümcül hata: Sınıf 'Me_Myclass' on line ev / myuser / iş / projectname / application / controllers / SomeController.php / bulunamadı x

Herhangi bir fikir?

Potansiyel İlişkin Miscellany:

Autoloader ben uygulama / kitaplık altında, diğer klasörlerde tanımladığınız sınıflar ile modellerinin geliştirilmesi olduğumda iş gibi görünüyor.

Birisi ben çalıştı ama sorunu çözmek için görünmedi ve bu ad kullanan modellerin işlevi kırma katma olumsuz etkisi vardı 'Default', değişen önerdi.

4 Cevap

Sen sınıf adı Me_Myclass olması gerekir:

class Me_Myclass
{
}

Eğer klasör yapısı var ki yukarı bir seviyede kütüphane klasörünü taşıyın:

/
    /application
    /library
    /public

Ve sonra Bootstrap _initAutoload için aşağıdaki add ():

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

Böyle config.ini dosyasında özdevinimli_yükle dir tanımlayabilirsiniz:

autoloaderNamespaces[] = "Me_"


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

% 100 çalışıyor

Ben smack0007 @ vasıta Zend_Loader_Autoloader :: getInstance () ile _initAutoload yönteminin içeriğini değiştirmek düşünüyorum -> registerNamespace ('Me_'); bu nedenle bu gibi görünüyor:

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

Bu sorun, ama ben sadece son gün geçirdim ve yarım benim kendi benzer bir sorun (ilk kez Windows Linux üzerinde o kadar yükleme) anlamaya çalışıyorum emin değilim. Ben kütüphanenin klasör adı durumda kör çıkıyor.

/library
    /Tlib

(* nix) gibi aynı değildir

/library
    /tlib

Sınıf adı genellikle bu

class Tlib_FooMe {
 ...
}

Bu benzer şekilde dalgın olan birine yardımcı olur umarım.