Zend framework 如何设置未映射的资源

Zend framework 如何设置未映射的资源,zend-framework,autoload,Zend Framework,Autoload,dir结构是: application models Milestones ObserverBroker.php => Application_Model_Milestone_ObserverBroker Observers Milestone.php => Application_Model_Observer_Milestone 在Bootstrap.php $loader->

dir结构是:

application
    models
       Milestones
          ObserverBroker.php    => Application_Model_Milestone_ObserverBroker
       Observers
          Milestone.php         => Application_Model_Observer_Milestone
在Bootstrap.php

$loader->addResourceType('observer','models/observers','Model_Observer');
$loader->addResourceType('observerbroker','models/milestones','Model_Milestone');
我遇到的问题是:

[f@gail]$ php zfrun.php \
>         --environment development -a task.create-milestone -m '%s' \
>         -p '%s'
PHP Fatal error:  Class 'Application_Model_Milestone_ObserverBroker' not found in /var/www/html/sites/plugin_handler/application/controllers/TaskController.php on line 55

Fatal error: Class 'Application_Model_Milestone_ObserverBroker' not found in /var/www/html/sites/plugin_handler/application/controllers/TaskController.php on line 55


[f@gail]$ php zfrun.php \
>         --environment development -a task.update-milestone -m '%s' -o '%s' \
>         -p '%s'
PHP Fatal error:  Class 'Application_Model_Milestone_ObserverBroker' not found in /var/www/html/sites/plugin_handler/application/controllers/TaskController.php on line 81

您不必为
Application\u Model\u
命名空间中的类添加资源类型

默认模块自动加载程序已经包含了相关规则,前提是您配置的
appnamespace
为“应用程序”

作为一个测试,我刚刚创建了两个模型,
Application\u Model\u test
(Application/models/test.php)和
Application\u Model\u test\u test
(Application/models/test/test.php),无需进一步添加任何内容,就可以在控制器中创建每个模型的实例

编辑

在重读您的问题时,您似乎希望将
应用程序\u模型\u里程碑\u
类存储在“里程碑*s*”(复数)中,对于观察者类也是如此。虽然我认为您最好将这些存储在
application/models/Milestone
application/models/Observer
下,并让默认自动加载器完成它的工作,但您的问题似乎是由于区分大小写

您的
$loader->addResourceType()
调用使用小写文件夹名,而目录结构示例使用
里程碑
观察者
(大写字母)


这将在区分大小写的文件系统上失败。

我已将目录里程碑更改为里程碑,将观察者更改为观察者。谢谢你的回答。我用这个来实现trac插件上的观察者模式。