2012-05-24 35 views
0

我在我的Zend网站有一个不寻常的自动加载问题。直到现在自动加载一直在努力。现在,我添加了一个新文件,项目和自动加载无法找到它。我已经将问题简化为最简单的测试案例,并想知道是否有人可以帮我解决问题。Zend自动加载器无法找到现有文件

在我的网站我有一个常用的目录结构,就像这样:

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

我已经正确地设置了自动负载量(每StackOverflow上其他有益的意见),并注册了EXT_命名空间,这是通过能够正确实例化Ext_Extras_Test来证明。

当我尝试实例化Ext_Service_Test时,问题出现了。自动加载“无法打开流”。我检查了正确的拼写,使用find,ls和文件资源管理器列出了目录内容,以确保该文件存在于正确的位置。我只是不能到&^%%£*找到文件!有没有人有任何线索?

+0

您是否检查您的文件/文件夹是否具有读取权限(unix权限)? – Aure77

+0

这可能与权限相关。也可以尝试手动在文件中查看是否得到相同的错误。 –

+0

通常当我遇到这种问题时,这是因为我试图加载具有默认加载器的类。尝试将“服务”更改为“服务”,其中包含一些默认设置,例如“映射器”。到目前为止,我一直无法找到有关证明的参考或代码。 – RockyFord

回答

1

发现你正试图重写一个资源自动加载,即使它没有指定我敢肯定,这将影响所有的命名空间:

42.3.2。模块资源自动加载器Zend Framework附带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” ,它将在名为 “Entry.php”的文件的 资源目录的“forms /”子目录中查找。

当使用Zend_Application, Zend_Application_Module_Autoloader的实例模块白手起家将默认为每个 离散模块创建,让您自动加载模块的资源。

+0

我对此不确定。资源自动加载器映射适用于'appnamespace'或模块名称空间中的类。对于使用'autoloadernamespaces [] =“MyLib”'注册名称空间的'库'路径上的类,这些映射将不适用。这不正确吗?在我看来,问题评论中的权限问题更可能是问题。 –

+0

我同意这些映射'不应该'应用,这并不意味着他们不会,至于权限,还有一些可以检查,但是如果他在已经拥有适当权限的目录中创建了一个新目录,他们应该继承。无论哪种方式尝试。(它可能最终会成为没有人,但...);) – RockyFord

+0

这是一个。我只是将它移动到应用程序/服务(使用适当的重命名),并且所有事情都恢复了生机。谢谢你的帮助! –