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.php
将include_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/helpers
或modules/module/views/helpers
中,它会起作用。在您看来,使用$this->Translate($someParam)
调用助手...祝您好运
这是最全面、最简洁的答案。没想到这么多谢谢!我已经掌握了窍门,但很难找到这么好的信息。
我很高兴,很高兴它有帮助。并感谢 RockyFord 为我通常过度扩张的闲逛提供了底线。 ;-)以上是关于ZF 包含路径的主要内容,如果未能解决你的问题,请参考以下文章
zf2 插入使用 $db->insert($table, $data);风格
具有 ZF2 的 AWS 工作程序层 cron 产生 404,但在本地工作?
ZF_react hooks useEffect的实现 useRef useImperativeHandle的实现,react整体功能实现完毕