我有一个非常奇怪的情况,我的模块正在工作但我的模块的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个小时甚至无法获得一篇关于这个案例的博文......
说到这一点,我的模型和控制器类正在被自动加载。
答案 0 :(得分:7)
尝试以下方法......
更改您的application.ini
文件以使用
; lose the quotes
resources.modules[] =
从应用_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"