0

我正在尝试弄清楚下面的工作原理......

从哪里来Jobs_Form_Report_Productivity()

public function productivityAction(){
        $this->view->headTitle('Number of Unique Jobs by Portfolio');
        $this->view->form = new Jobs_Form_Report_Productivity();

        if($this->view->form->isValid($_POST))
        {
            $report = new Model_Users();

            $this->view->results = $report->reportProductivity(
                $this->view->form->getStartDate('yyy-MM-dd'), 
                $this->view->form->getEndDate('yyy-MM-dd')
            );
        }

    }

这是某种形式的模型类吗?

4

2 回答 2

2

ZF1 使用 PEAR 命名空间(注意下划线),每个下划线都成为目录分隔符,类名的最后一部分通常是文件名,通常类似于 'Pr​​oductivity.php',因此 Jobs_From_Report_Productivity 应该位于 Jobs/Form/Report在一个名为“Productivity.php”的文件中。由于您要查找的类名不是以“Application_”开头,因此我的建议是它是一个名为“jobs”的模块命名空间,因此您可能正在寻找“application/modules/jobs/forms/report/Productivity.php”,否则它可能在库目录中,如 library/jobs/forms/report/Productivity.php。当然,用 ZF1 用来定位类的位置完全可以做一些奇怪而奇妙的事情。

于 2013-01-25T08:36:37.180 回答
0

Zend Framework 使用 Zend_Loader_Autoloader 加载被调用但在脚本范围内没有找到的类。当调用未找到的类时,自动加载器会启动并通过几个简单的步骤找到并包含类文件。

1) 将类名中的所有 _(下划线符号)转换为 /(斜杠)。例子: Zend_Loader_Autoloade 变成 Zend/Loader/Autoloader

2) 后缀 .php 附加到转换后的字符串的末尾,变为:Zend/Loader/Autoloader.php

3) 检查“Zend_”名称空间(名称空间作为类前缀,而不是 PHP5.3 名称空间)是否已向自动加载器注册。如果名称空间已注册,那么自动加载器将发出:include Zend/Loader/Autoloader.php。

4)如果找到该类,则返回它并继续脚本。如果根据配置找不到类,则抛出异常或错误。

前提条件: Zend/Loader/Autoloader.php 文件应该在当前脚本的 PHP 包含路径中。

因此,Jobs_Form_Report_Productivity 将对应于 Jobs/Form/Report/Productivity.php,并且可以在一个(或多个)包含路径中找到。使用 PHP 查找包含路径:get_include_path()。大多数时候(在 ZF1 中)包含路径是在 Zend Framework 应用程序的公共目录中的 index.php 文件中设置的。

请参阅:https ://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md ,因为来自 PHP-FIG 的人将这种自动加载方法作为标准的“PSR-O”

希望这可以帮助 :)

于 2013-01-25T10:07:21.080 回答