ZF包含路径

时间:2012-06-07 12:16:59

标签: zend-framework require-once

require_once是否正确? 你在哪里以及如何把它包括在路径中?

它不应该在application.ini或bootstrap中吗?

示例:

require_once 'Zend/View/Helper/Abstract.php';
// @question - is this correct - where and
// how would you put it include path

class Zend_View_Helper_Translate extends Zend_View_Helper_Abstract
{
}

2 个答案:

答案 0 :(得分:3)

一般来说,您可以通过恰当地使用require_once来完全避免Zend_Loader_Autoloader次来电。当然,关键是“合适”。

通常,您的public/index.php会将include_path设置为library文件夹。然后,如果您使用Zend_Application,则Zend_Loader_Autoloader已注册,以使用autoloadernamespaces中的application/configs/application.ini数组找到已注册名称空间前缀的任何PSR-0 compliant classes。< / p>

棘手的部分是在不“驻留在include_path”的文件中定义的类,如application/models中出现的模型,驻留在application/services中的服务等。即使类在那里定义的倾向于遵循PSR-0标准,PSR-0映射相对于基数 off 发生这一事实include-path意味着系统必须知道classname前缀和基本路径之间的映射。这就是resource autoloaders的用武之地。这些资源自动加载器通常在扩展Zend_Application_Bootstrap_Bootstrap的应用程序Bootstrap和扩展Zend_Application_Module_Bootstrap的模块引导中自动设置。

查看帮助程序是驻留在“include_path”之外的类的另一个示例,可能类似于application/views/helpers。由于这些通常使用简短形式$this->someHelper($someParam)在视图脚本中调用,因此必须告知系统如何从此短名称生成完全限定的类名。这是使用$view->addPrefixPath()来完成的,Zend_Loader_Autoloader将名称空间前缀映射到文件系统位置。同样,应用程序级和模块级引导机制为您设置了大部分内容。

对于不遵循PSR-0标准的库/类,您可以创建custom autoloaders并将它们(通常在Bootstrap)附加到include/require单例。这是唯一一个明确包含/要求的地方。

tl; dr:正确使用现有的ZF自动加载器机制,您几乎不需要在自己的应用程序代码中使用{{1}}语句。

答案 1 :(得分:-1)

在这种情况下不正确。

首先,请使用Zend Tool。它将创建您不知道如何创建自己的文件。它将创建正确的类名,适当地扩展它们并require_once可能需要的任何内容。

不要将require_once放在引导程序中。您希望它仅在需要时执行,而不是每次请求都执行。

至于你提供的例子,正确的版本是:

require_once "Zend/View/Interface.php";
class Zend_View_Helper_Foo extends Zend_View_Helper_Abstract {
}

由帮助程序扩展的类是自动加载的,并且将它放在require_once中什么都不做。