8

我在这里定义了一个类库 .../projectname/library/Me/Myclass.php 定义如下:

<?php
class Me_Myclass{
}
?>

我有以下引导程序:

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

}

在我的控制器中,我尝试像这样实例化类:

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

当我直接导航到 http:/something.com/projectname/some?id=1 时,我收到以下错误:

致命错误:在第 x 行的 /home/myuser/work/projectname/application/controllers/SomeController.php 中找不到类“Me_Myclass”

有任何想法吗?

可能相关的杂项:

当我使用我在应用程序/库下的其他文件夹中定义的类扩展模型时,自动加载器似乎工作。

有人建议更改我尝试过的“默认”,但它似乎并没有解决问题,并且使用此命名空间破坏模型的功能产生了额外的负面影响。

4

4 回答 4

13

你的班级需要命名为 Me_Myclass:

class Me_Myclass
{
}

将您的库文件夹上移一个级别,以便您拥有文件夹结构:

/
    /application
    /library
    /public

然后在您的 Bootstrap 中将以下内容添加到 _initAutoload() 中:

    Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
于 2010-01-28T08:25:18.083 回答
2

you can define the autoload dir in the config.ini file like this:

autoloaderNamespaces[] = "Me_"


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

works 100%

于 2012-03-12T06:57:51.923 回答
1

我认为@smack0007 意味着用 Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_'); 替换你的 _initAutoload 方法的内容;所以它看起来像这样:

protected function _initAutoload()
{
    Zend_Loader_Autoloader::getInstance()->registerNamespace('Me_');
}
于 2010-06-16T05:30:04.580 回答
0

不确定这是否是您的问题,但我刚刚花了最后一天半的时间试图找出我自己的类似问题(第一次从 Windows 将它加载到 Linux 上)。原来我对图书馆的文件夹名称大小写视而不见。

/library
    /Tlib

与(在 *nix 上)不同

/library
    /tlib

类名通常是这个

class Tlib_FooMe {
 ...
}

希望这可以帮助同样心不在焉的人。

于 2010-07-08T09:46:16.727 回答