【发布时间】:2011-09-30 18:53:43
【问题描述】:
我们使用了 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,以减少变量。
那么,我们在引导程序中的新代码是:
$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“包含”路径。我错了吗?还有其他想法吗?在这种情况下,我会很高兴地写出最终对我有用的方法来帮助其他可怜的灵魂。也许与命名空间有关?
【问题讨论】:
标签: php zend-framework