Question

J'ai une bibliothèque de classe définie ici ... / projectname / bibliothèque / Me / Myclass.php définie comme suit:

<?php
class Me_Myclass{
}
?>

J'ai le bootstrap suivant:

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

}

Dans mon contrôleur j'essaie d'instancier la classe comme ceci:

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

Quand je navigue directement à http: /something.com/projectname/some id = 1 J'obtiens l'erreur suivante:

Erreur fatale: Classe 'Me_Myclass' introuvable dans /home/myuser/work/projectname/application/controllers/SomeController.php en ligne x

Toutes les idées?

potentiellement Pertinent Miscellanées:

Le chargeur automatique semble fonctionner quand je suis l'extension des modèles avec des classes que j'ai définis dans d'autres dossiers sous application / bibliothèque.

Quelqu'un a suggéré de changer le « défaut », que je tentais, mais il ne semble pas résoudre le problème et a eu l'impact négatif supplémentaire de rupture fonction des modèles utilisant cet espace de noms.

Était-ce utile?

La solution

a besoin de vous classe comme nom Me_Myclass:

class Me_Myclass
{
}

Déplacer votre dossier de bibliothèque un niveau afin que vous ayez la structure du dossier:

/
    /application
    /library
    /public

Et puis dans votre Bootstrap ajouter ce qui suit à la _initAutoload ():

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

Autres conseils

vous pouvez définir le répertoire autoload dans le fichier config.ini comme ceci:

autoloaderNamespaces[] = "Me_"


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

fonctionne à 100%

Je pense que @ smack0007 moyens remplacer le contenu de votre méthode _initAutoload avec Zend_Loader_Autoloader :: getInstance () -> registerNamespace ( 'Me_'); il ressemble à ceci:

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

Je ne sais pas si cela est votre problème, mais je viens de passer le dernier jour et la moitié à essayer de comprendre mon problème similaire (première fois le chargement sur Linux à partir de Windows). J'étais S'avère aveugle au cas du nom du dossier de ma bibliothèque.

/library
    /Tlib

est pas le même que (le * nix)

/library
    /tlib

nom de classe est généralement ce

class Tlib_FooMe {
 ...
}

Espérons que cela aide quelqu'un qui est tout aussi distraite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top