【问题标题】:Zend Autoloader unable to find existing fileZend Autoloader 无法找到现有文件
【发布时间】:2012-05-24 07:44:01
【问题描述】:

我的 Zend 网站出现异常的自动加载问题。到目前为止,自动加载一直是一种享受。不过现在,我在项目中添加了一个新文件,但自动加载却找不到它。我已将问题简化为最小的测试用例,想知道是否有人可以帮助我。

在我的网站中,我有一个通常的目录结构,如下所示:

site/
  application/...
  library/
    Zend/...
    PHPUnit/...
    Ext/
      Extras/
        Test.php
      Service/
        Test.php

我已经正确设置了自动加载(根据 StackOverflow 上其他有用的 cmets)并注册了 Ext_ 命名空间,这可以通过正确实例化 Ext_Extras_Test 来证明。

当我尝试实例化 Ext_Service_Test 时出现问题。自动加载“无法打开流”。我检查了正确的拼写,使用findls 和文件资源管理器列出了目录内容,以确保文件存在于正确的位置。

我就是无法通过 &^%%£* 找到文件!有没有人有线索?

【问题讨论】:

  • 您是否检查您的文件/文件夹是否具有读取权限(unix 权限)?
  • 这可能与权限有关。也可以尝试在文件中手动要求,看看你是否得到同样的错误。
  • 通常当我遇到这种问题时,这是因为我正在尝试加载具有默认加载器的类。尝试将“服务”更改为“服务”,其中包含一些像“映射器”一样隐藏的默认值。到目前为止,我一直找不到参考资料或证明代码。

标签: php zend-framework zend-autoloader


【解决方案1】:

发现您正在尝试覆盖资源自动加载器,即使未指定它我很确定这会影响所有命名空间:

42.3.2。模块资源自动加载器 Zend 框架附带了 Zend_Loader_Autoloader_Resource 的具体实现,它 包含覆盖默认推荐的资源类型映射 Zend Framework MVC 应用程序的目录结构。这个装载机, Zend_Application_Module_Autoloader,带有以下映射:

forms/       => Form
models/      => Model
    DbTable/ => Model_DbTable
    mappers/ => Model_Mapper
plugins/     => Plugin
services/    => Service
views/
    helpers  => View_Helper
    filters  => View_Filter

例如,如果您有一个前缀为“Blog_”的模块,并且 试图实例化类“Blog_Form_Entry”,它会查看 资源目录的“forms/”子目录,用于名为 “入口.php”。

当使用 Zend_Application 的模块引导时,一个实例 Zend_Application_Module_Autoloader 将为每个默认创建 离散模块,允许您自动加载模块资源。

【讨论】:

  • 我不确定。资源自动加载器映射适用于 appnamespace 或模块命名空间中的类。对于library 路径上使用autoloadernamespaces[] = "MyLib" 之类的名称注册的类,这些映射将适用。不是吗?在我看来,问题 cmets 中的权限问题更可能是问题。
  • 我同意那些映射“不应该”适用,这并不意味着它们不会,至于权限,也需要检查,但如果他在已经有适当的目录中创建了一个新目录他们“应该”继承的权限。无论哪种方式都可以尝试。 (它可能最终会成为没有人想到的东西......);)
  • 就是这个。我只是将它移到应用程序/服务(通过适当的重命名),一切都恢复了活力。感谢您的帮助!
猜你喜欢
  • 2012-10-31
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
相关资源
最近更新 更多