如何设置未映射的资源

时间:2011-03-19 02:26:42

标签: zend-framework autoload

目录结构是:

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

1 个答案:

答案 0 :(得分:0)

您不必为Application_Model_命名空间中的类添加资源类型。

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

作为测试,我刚刚创建了两个模型,Application_Model_Test(application / models / Test.php)和Application_Model_Test_Test(application / models / Test / Test.php)并且没有添加任何其他内容,能够在我的控制器中创建每个实例。

修改

在重新阅读您的问题时,您似乎希望将Application_Model_Milestone_类存储在“Milestone * s *”(复数)中,同样也存储在Observer类中。虽然我认为你最好只在application/models/Milestoneapplication/models/Observer下存储这些内容并让默认自动加载器执行此操作,但看起来你的问题是由于区分大小写。

您的$loader->addResourceType()来电使用小写文件夹名称,而您的目录结构示例使用MilestonesObservers(大写首字母)。

对于区分大小写的文件系统,这将失败。