2012-06-07 210 views
1

require_once是否正确? 哪里,你会如何把它包括路径?ZF包含路径

它不应该在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 
{ 
} 
+0

我的问题给你...是否有助于你真正需要的解决方案?也许一个插件会更合适? – RockyFord

回答

3

一般而言,您可以通过适当使用Zend_Loader_Autoloader几乎完全避免拨打require_once。当然,关键是“适当的”。

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

棘手的部分是在不“驻留在包含路径”文件中定义的类,就像出现在application/models模型,驻留在application/services服务等即使类中定义有倾向于遵循PSR- 0标准,PSR-0映射相对于基地off包含路径的事实意味着系统必须知道类名前缀与基本路径之间的映射。这是resource autoloaders进来的地方。这些资源自动加载器通常在应用程序Bootstrap中自动设置,扩展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语句。

+1

@想要解决这个很好的答案,丢掉include语句并将帮助器放在目录'application/views/helpers'或'modules/module/views/helpers'中,它就可以工作。在你的视图中用'$ this-> Translate($ someParam)'调用助手'...好运 – RockyFord

+0

这是最全面和最简洁的答案。没想到这么多谢谢!我正在掌握它,但很难找到信息这个好。 – Wil

+0

我的荣幸,很高兴它有所帮助。感谢RockyFord为我的典型的过度扩张漫游做了底线。 ;-) –

-1

这不是在这种情况下是正确的。

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

请勿将require_once放置在引导程序中。您只希望它在需要时执行,而不是每个请求。

至于您所提供的例子中,正确的版本是:

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

由助手扩展的类被自动加载,并把它在require_once什么都不做。

+0

对于downvoter:任何评论为什么你认为我的答案没有用? – mingos

+0

感谢上面的答案。终于到了那里。 – Wil

+0

我已经阅读过它,但仍然没有理由让我失望。 – mingos