我们已经使用了Zend_Log,它在application.ini中针对不同的情况进行了不同的配置。我们初始化它/让它在引导并存储在注册表中:在Zend Framework中开发/使用自定义资源插件
$r = $this->getPluginResource('log');
$logger = $r->getLog();
但是我们的子类Zend_Log进行(比如,Our_Log)添加自定义的功能,并希望得到同样的方式。那么我们必须制作一个新的资源插件。这似乎很容易 - 只需复制Application/Resource/Log.php,将文件重命名为Ourlog.php,将该类重命名为类Zend_Application_Resource_Ourlog。现在,我们不用担心“Our_Log”这个类 - 只需使用新的Resource Plugin来获取Zend_Log,以减少变量。
那么,我们在引导新的代码是:
$r = $this->getPluginResource('ourlog');
$logger = $r->getLog();
,但当然,这并不工作,错误的方法应用到非对象“R”。根据文档,
“只要您为此资源插件注册前缀路径,即可在您的应用程序中使用它。”
但是您如何注册前缀路径?这会有所帮助。但是这并不重要,我使用与默认相同的前缀路径,并且我知道该文件正在被读取,因为我“需要”它。
无论如何,任何指导什么简单的步骤我失踪将不胜感激。
感谢指针 - 如此接近,如此接近(我认为)。我想我得到它...
好了,所以我改名为类Xyz_Resource_Xyzlog,我把它放在library/Xyz/Resource/Xyzlog.php
然后,因为我不爱INI文件中,我把引导:
$loader=$this->getPluginLoader();
$loader->addPrefixPath('Xyz_Resource','Xyz/Resource/');
$r = $this->getPluginResource('xyzlog');
if (!is_object($r)) die ('Not an object!!');
猝死。那么,好吧,做ini:
pluginPaths.Xyz_Resource='Xyz/Resource/'
相同。没有帮助。我相信插件路径的基本路径将包含PHP“include”路径。我误解了吗?任何其他想法?我会高兴地写下最终在这种情况下为我帮助其他可怜的灵魂的东西。可能与名称空间有关?
+1。也只是对问题作者的一个提示,你不应该命名你的资源Zend_ *,因为它是为实际上是框架一部分的类保留的。从[命名约定](http://framework.zend.com/manual/en/coding-standard.naming-conventions。html)页面:注意:*重要*:必须与Zend Framework库一起部署的代码,但不是标准或额外库的一部分(例如未由Zend分发的应用程序代码或库)绝不能以“Zend_”开头或“ZendX_”。 – drew010