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

时间:2017-12-22 16:27:34

标签: php zend-framework zend-framework2 view-helpers zend-framework3

我正在使用名为module的{​​{1}},其中有一个名为Facebook的视图助手。此视图帮助程序获取任何URL的Facebook共享URL。

但是,我最近添加了另一个名为shareUrl的{​​{1}},其中还有一个名为module的视图助手。

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

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

shareUrl

我希望shareUrl$facebookShareUrl = $this->shareUrl('https://www.example.com/'); $twitterShareUrl = $this->shareUrl('https://www.example.com/'); 存储两个不同视图助手的返回值。

1 个答案:

答案 0 :(得分:6)

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

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

1)最好的方法是使用FQCN为已注册的视图助手设置别名。查看我们创建可在$this->facebookShareUrl('exmaple.com')

等视图中使用的别名的示例代码
return [
    'view_helpers' => [
       'aliases' => [
           'facebookShareUrl' => FacebookModule\Helper\ShareUrlHelper::class,
           'twitterShareUrl'  => TwitterModule\Helper\ShareUrlHelper::class,
       ],
    ]
]

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

$viewHelperManager = $this->getHelperPluginManager();
$facebookShareUrlHelper = $viewHelperManager->get(FacebookModule\Helper\ShareUrl::class);
$twitterShareUrlHelper = $viewHelperManager->get(TwitterModule\Helper\ShareUrl::class);