微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-Zend Framework模型无法通过自动加载器加载

我已经用Zend_Application设置了我的应用程序.我的Bootstrap.PHP中有一个_initAutoload()方法,如下所示:

 public function _initAutoload(){
     $this->bootstrap("frontController");
     $front = $this->frontController;

     $autoloader = Zend_Loader_Autoloader::getInstance();

     $autoloader->registerNamespace('Client_');
     $autoloader->registerNamespace('Frontend_');
     $autoloader->registerNamespace('Global_');
     $autoloader->registerNamespace('Global_Helper_');
     $autoloader->setFallbackAutoloader(true);

     $modules = $front->getControllerDirectory();
     $default = $front->getDefaultModule();

     foreach (array_keys($modules) as $module) {
         if ($module === $default) {
             continue;
         }

         $autoloader->pushAutoloader(new Zend_Application_Module_Autoloader(array(  
             "namespace" => ucwords($module),
             "basePath" => $front->getModuleDirectory($module),
         )));

     }

     return $autoloader;  
 }

我还设置了FrontController来为认模块添加前缀(对我来说似乎更合逻辑)$front-> setParam(“ prefixDefaultModule”,true)

我认为我具有通常的目录结构.

问题:

我已经为每个模块设置了子域.在主域名(www)中,一切正常.主要模块是前端.如果前端是认模块,那么东西就可以了:).好.现在.对于每个子域,我都有相同的index.PHP,但其中的env值已更改.对于客户端子域,env值为客户端等.每个env值对应于我的application.xml部分.每个application.xml子域部分(客户端,api等)扩展了称为认值的主部分(当前有一个测试部分也启用了错误功能,因此每个子域都扩展了测试,并且测试扩展了认值).

application.xml的每个子域部分都会更改认模块名称.因此,对于部分认为其前端,对于部分客户端为其客户端,等等.

现在
当我访问domain.com/client或domain.com/api-很好. API和客户端使用Client_Model_NameOfTheModel并按预期使用它-位于应用程序/模块/客户端/模型/NameOfTheModel.PHP和DbTable / NameOfTheModel.PHP
作品


当我从其各自的子域(client.domain.com,api.domain.com等)访问模块,并且认模块已从前端更改为其各自的子域模块名称时,它将结束工作.它甚至不输出该“堆栈跟踪”.

Warning: include(Client/Model/ContactLists.PHP) [function.include]: Failed to open stream: No such file or directory in [heres-my-path-to-root]/library/Zend/Loader.PHP on line 136

Warning: include() [function.include]: Failed opening ‘Client/Model/ContactLists.PHP’ for inclusion (include_path='[heres-my-path-to-root]/library:.:/usr/lib/PHP:/usr/local/lib/PHP’) in [heres-my-path-to-root]/library/Zend/Loader.PHP on line 136

Fatal error: Class ‘Client_Model_ContactLists’ not found in [heres-my-path-to-root]/application/modules/client/controllers/ContactListsController.PHP on line 4

我已经尝试了2天才能使其正常运行.只是没有.它仅在认域下工作,而在application.xml将其认模块更改为其子域名时无效.像那样.目前,这一点非常关键,因为我无法继续操作,并且该应用需要在本周末退出沙盒(处于早期Beta测试).

感谢任何人的建议.
PS.对不起,英语不好.这不是我的母语

解决方法:

这只是一个粗略的猜测,但是由于以下几行,它似乎可能在认情况下起作用:

 $autoloader->setFallbackAutoloader(true);

 $modules = $front->getControllerDirectory();
 $default = $front->getDefaultModule();

 foreach (array_keys($modules) as $module) {
     if ($module === $default) {
         continue;
     }

本质上,如果您的模块是认模块,它将跳过该模块,这意味着它会退回到我认为的后备自动加载器,并且如果自动加载器无法找到您的模型,那么就会出现问题.错误中的根路径和试图加载的类路径的连接正确吗?

而且,这看起来可能是错误

         "namespace" => ucwords($module),

我认为这需要

         "namespace" => ucwords($module) . "_",

就像您的其他命名空间一样.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐