【问题标题】:Developing/using a custom Resource Plugin in Zend Framework在 Zend Framework 中开发/使用自定义资源插件
【发布时间】: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


    【解决方案1】:

    使用插件加载器解析插件类,其工作方式与自动加载器略有不同;所以仅仅要求上课对你没有帮助。相反,将其添加到您的 application.ini:

    pluginPaths.Application_Resource = "Application/Resource"
    

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

    【讨论】:

    • +1。也只是给问题作者的一个注释,你不应该命名你的资源 Zend_* 因为它是为实际上是框架一部分的类保留的。来自naming conventions 页面:注意:重要:必须与 Zend Framework 库一起部署但不属于标准或附加库的代码(例如,应用程序代码或 Zend 未分发的库)绝对不能以“Zend_”或“ZendX_”开头。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2023-04-06
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    相关资源
    最近更新 更多