ZF 包含路径

Posted

技术标签:

【中文标题】ZF 包含路径【英文标题】:ZF Include path 【发布时间】:2012-06-11 11:55:26 【问题描述】:

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


【问题讨论】:

我的问题是...视图助手是您真正需要的解决方案吗?也许一个插件会更合适? 【参考方案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 中什么都不做。

【讨论】:

致反对者:对为什么您认为我的回答没有用有任何评论? 谢谢,请参阅上面的答案。终于到了。【参考方案2】:

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

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

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

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

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

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

【讨论】:

@Wil 总结这个很好的答案,丢失包含语句并将助手放在目录application/views/helpersmodules/module/views/helpers 中,它会起作用。在您看来,使用$this->Translate($someParam) 调用助手...祝您好运 这是最全面、最简洁的答案。没想到这么多谢谢!我已经掌握了窍门,但很难找到这么好的信息。 我很高兴,很高兴它有帮助。并感谢 RockyFord 为我通常过度扩张的闲逛提供了底线。 ;-)

以上是关于ZF 包含路径的主要内容,如果未能解决你的问题,请参考以下文章

如何使用条件关联建立 ZF2 学说实体

zf2 插入使用 $db->insert($table, $data);风格

具有 ZF2 的 AWS 工作程序层 cron 产生 404,但在本地工作?

ZF_react hooks useEffect的实现 useRef useImperativeHandle的实现,react整体功能实现完毕

Cygwin:使用包含 Windows 路径的路径变量(其中包含空格)

文件加载路径-文件嵌套包含