0

我想在 myModule/Bootstrap.php 中调用位于 myModule/myFolders/myFile.php 中的自定义类

这是它现在的样子:

    <?php

    class Users_Bootstrap extends Zend_Application_Module_Bootstrap {

        public function _initAutoload() {
        Zend_Loader_Autoloader::getInstance()->pushAutoloader(new NAMESPACE_Excel_ExcelAutoLoader()); // This workes fine

        new Myfolder_Myfile();  // THIS IS WHERE I'm CALLING my CLASS

}

        public function _initRoutes() {

            $router = Zend_Controller_Front::getInstance()->getRouter();

             $listUsersRoute = new Zend_Controller_Router_Route("admin/users/manage", array(
               'module' => 'users',
               'controller' => 'admin',
               'action' => 'index'      ));

            $router->addRoute('listUsersRoute', $listUsersRoute);


        }     }

如果我将自定义类移动到 myModule/Modles 文件夹并从那里调用它,它就可以工作。

我知道 Zend Bootstrap 知道并自动从我的模块中加载位置作为视图、控制器和模型。那么我怎样才能让它也加载 myFolder 呢?

4

1 回答 1

1

有很多方法可以完成您正在尝试做的事情。首先,我要问 - 是否需要在许多地方重用 MyFolder_MyFile() 类?如果没有,您可能会考虑将该类的逻辑转换为它自己的自定义引导程序 - 它扩展了您的 Users_Bootstrap。然后,你会有这样的事情:

MyFolder_MyFileBootstrap extends Users_Bootstrap

然后,您可以选择创建单独的 _init* 方法 - 或者保持与您编写的一样兼容,您可以创建一个新的 _initAutoload() 来首先执行父级 - 然后是您自己的任何逻辑......

MyFolder_MyFileBootstrap::_initAutoload()

public function _initAutload() {
    parent::_initAutload();
    // my own logic here
}

但是,如果此解决方案将彻底改变您编写应用程序的方式,您将需要使用 Zend Framework Autoloader 的命名空间方法添加文件。

对于您的示例,您可以在 _initAutoloader() 方法中尝试此操作:

$applicationAutoloader = $this->getResourceLoader();
$applicationAutloader->addResourceType('myfolder', 'MyFolder', 'MyFolder');

根据您的文件布局,您可能需要稍微调整一下。

于 2013-02-03T17:27:17.543 回答