Zend框架形式帮手

时间:2013-01-25 07:31:59

标签: php zend-framework

我正试图找出以下工作原理......

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')
            );
        }

    }

这是某种形式的Model类吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

Zend Framework使用Zend_Loader_Autoloader来加载在脚本scoope中调用但未找到的类。当一个未找到的类被调用时,自动加载器就会启动并通过几个简单的步骤查找并包含该类文件。

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

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

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

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

PRE-CONDITION:文件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”

希望这会有所帮助:)