在Zend Framework中开发/使用自定义资源插件

时间:2011-09-30 18:53:44

标签: php zend-framework

我们使用了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“包含”路径。我错了吗?还有其他想法吗?在这种情况下,我很乐意写下最终能帮助我的其他一些穷人的东西。可能与名字空间有关吗?

1 个答案:

答案 0 :(得分:4)

使用插件加载器解析插件类,插件加载器与自动加载器的工作方式略有不同;因此只需要上课就不会帮到你。而是将其添加到您的application.ini:

pluginPaths.Application_Resource = "Application/Resource"

然后您应该能够正常使用该类。由于您在上面的路径将在默认的Zend之前进行检查,因此您还可以将类命名为“Log”,并仍然扩展Logger资源以覆盖标准功能。