我正试图找出以下工作原理......
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类吗?
答案 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”
希望这会有所帮助:)