ZEND:在模块引导程序中加载自定义类

时间:2013-02-01 13:36:51

标签: php zend-framework zend-app-bootstrap

我想在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呢?

1 个答案:

答案 0 :(得分: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');

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