php - Zend Framework中的冲突视图助手名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php - Zend Framework中的冲突视图助手名称相关的知识,希望对你有一定的参考价值。

我正在使用名为moduleFacebook,它有一个名为shareUrl的助手。此视图帮助程序获取任何URL的Facebook共享URL。

然而,我最近添加了另一个名为moduleTwitter,它还有一个名为shareUrl的助手。

在Zend Framework版本2或3中,在视图中,如何调用一个shareUrl视图助手而不是另一个?

只是为了澄清,我视图中的代码如下所示:

$facebookShareUrl = $this->shareUrl('https://www.example.com/');
$twitterShareUrl  = $this->shareUrl('https://www.example.com/');

我希望$facebookShareUrl$twitterShareUrl存储两个不同视图助手的返回值。

答案

如果您有两个具有相同名称的帮助程序,则只有一个可用,因为它在servicemanager(viewhelpermanager)中以给定名称注册。如果您通过加载application.config.php中的模块来切换它们,您可以更改默认值。但这不是解决问题的真正办法。

因此,有多种方法可以获得您需要的正确视图。

1)最好的方法是使用FQCN为已注册的视图助手设置别名。查看一些示例代码,我们创建可以在$this->facebookShareUrl('exmaple.com')等viewherlpers中使用的别名

return [
    'view_helpers' => [
       'aliases' => [
           'facebookShareUrl' => FacebookModuleHelperShareUrlHelper::class,
           'twitterShareUrl'  => TwitterModuleHelperShareUrlHelper::class,
       ],
    ]
]

2)使用PhpRenderer实例,使用视图本身中的viewhelpermanager通过其FQCN获取帮助程序。在view.phtml文件中

$viewHelperManager = $this->getHelperPluginManager();
$facebookShareUrlHelper = $viewHelperManager->get(FacebookModuleHelperShareUrl::class);
$twitterShareUrlHelper = $viewHelperManager->get(TwitterModuleHelperShareUrl::class);

以上是关于php - Zend Framework中的冲突视图助手名称的主要内容,如果未能解决你的问题,请参考以下文章

PHP Zend Framework:设置Zend Navigation

php zend framework

使用Zend Framework列出S3目录中的所有文件

更新:在 Zend Framework 中管理静态内容的最佳实践?

wincache 与 zend guard 的冲突

PHP Zend Framework:引导Zend_Log(登录firebug)