Zend模块Bootstrap无法加载

时间:2012-02-21 03:13:05

标签: zend-framework module autoload bootstrapping

我有一个非常奇怪的情况,我的模块正在工作但我的模块的boostrap没有被加载。

以下是我的application.ini中用于模块自动加载的段:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = ""

这是引导程序:

protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'User_',
            'basePath'  => APPLICATION_PATH .'/modules/user',
            'resourceTypes' => array (
            'model' => array(
                'path' => 'models',
                'namespace' => 'Model',
                )
            )
        ));
    }

我的模块的结构

Application
--modules
----user
------config/
------controllers/
------models/
------views/
------Bootstrap.php
----admin

这里的问题是没有加载User_Bootstrap。

<?php

class User_Bootstrap extends Zend_Application_Module_Bootstrap
{

    protected function _initAutoload()
    {
        Zend_Registry::set('debug', 'haha');
    }
}

通过在任何控制器上执行Zend_Registry :: get('debug'),它无法识别该密钥是在模块引导程序中设置的。实际上,User_Bootstrap中的任何语法错误都不起作用。

我不知道为什么User_Bootstrap没有自动加载。这让我抓狂,因为我已经研究了5个小时甚至无法获得一篇关于这个案例的博文......

说到这一点,我的模型和控制器类正在被自动加载。

3 个答案:

答案 0 :(得分:7)

尝试以下方法......

  1. 更改您的application.ini文件以使用

    ; lose the quotes
    resources.modules[] = 
    

    请参阅http://framework.zend.com/manual/en/zend.application.available-resources.html#zend.application.available-resources.modules

  2. 从应用_initAutoload()课程中删除Bootstrap方法。您不需要这个,因为模块引导程序会自动为您的User_类创建资源加载器

答案 1 :(得分:1)

不确定,但它可能像不正确的情况一样简单。 --Modules位于您的结构中,但您一直将其称为/modules。这些应该符合案例。

我希望就这么简单。

不要在模块引导程序中复制主引导程序的功能名称,据我所知,在ZF 1.x中,每次调用都会处理所有的boostraps,我认为主boostrap中的_initAutoload会覆盖模块自举。

尝试调用您的函数,例如_initModuleAutoload。
至少值得一试:)

答案 2 :(得分:0)

您是否尝试在application.ini配置文件中禁用frontController目录?尝试评论/删除此行:

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"