1

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
{
}
4

2 回答 2

3

一般来说,您可以require_once通过适当使用Zend_Loader_Autoloader. 当然,关键是“合适”。

通常,您public/index.php将 设置include_pathlibrary文件夹。然后,如果您使用Zend_ApplicationZend_Loader_Autoloader则注册 以查找任何符合 PSR-0 的类,其名称空间前缀已使用autoloadernamespaces数组 in注册application/configs/application.ini

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

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

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

tl;dr:通过正确使用现有的 ZF 自动加载器机制,您几乎不需要include/require在自己的应用程序代码中包含语句。

于 2012-06-07T13:59:53.193 回答
-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什么都不做。

于 2012-06-07T12:25:09.007 回答