我们使用了Zend_Log,它在application.ini中针对不同情况进行了不同的配置。我们初始化它/在引导程序中获取它并将其存储在注册表中:
$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,以减少变量。
那么,我们在bootstrap中的新代码是:
$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“包含”路径。我错了吗?还有其他想法吗?在这种情况下,我很乐意写下最终能帮助我的其他一些穷人的东西。可能与名字空间有关吗?
答案 0 :(得分:4)
使用插件加载器解析插件类,插件加载器与自动加载器的工作方式略有不同;因此只需要上课就不会帮到你。而是将其添加到您的application.ini:
pluginPaths.Application_Resource = "Application/Resource"
然后您应该能够正常使用该类。由于您在上面的路径将在默认的Zend之前进行检查,因此您还可以将类命名为“Log”,并仍然扩展Logger资源以覆盖标准功能。