php-Zend Framework中存在冲突的视图帮助程序名称

php-Zend Framework中存在冲突的视图帮助程序名称,php,zend-framework,zend-framework2,view-helpers,zend-framework3,Php,Zend Framework,Zend Framework2,View Helpers,Zend Framework3,我正在使用一个名为Facebook的模块,它有一个名为shareUrl的视图助手。此视图帮助器获取任何URL的Facebook共享URL 然而,我最近添加了另一个名为Twitter的模块,它还有一个名为shareUrl的视图助手 在Zend Framework版本2或3中,在视图中,如何调用一个shareUrl视图帮助器而不是另一个 为了澄清,我认为代码如下所示: $facebookShareUrl = $this->shareUrl('https://www.example.com/')

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

然而,我最近添加了另一个名为Twitter的模块,它还有一个名为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中加载模块来切换它们,则可以更改默认设置。但这并不是解决你问题的真正办法

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

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

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


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

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

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

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


您是如何在模块配置文件中注册这些帮助程序的?您是如何在模块配置文件中注册这些帮助程序的?我尝试了方法1,但收到错误消息在插件管理器Zend\View\HelperPluginManager中找不到名为facebookShareUrl的插件。要使此方法正常工作,我还需要采取其他步骤吗?您需要了解他们是如何在其模块中注册viewhelper的。我不知道您使用的是哪个软件包/库,所以我尝试给出一个通用的解决方案,您必须根据自己的情况进行调整。如果你能将回购协议链接到github/packagist上的软件包,我也许能为你调整一下这个例子。谢谢!根据您的回复,我能够更新模块。我的解决方案是在正在调用的模块中的“查看帮助”下添加“别名”和“工厂”部分。如果模块只包含“工厂”部分,我不确定这是否有效,但幸运的是,我拥有这些模块,因此我能够更新它们。我尝试了方法1,但收到错误消息在插件管理器Zend\View\HelperPluginManager中找不到名为facebookShareUrl的插件。要使此方法正常工作,我还需要采取其他步骤吗?您需要了解他们是如何在其模块中注册viewhelper的。我不知道您使用的是哪个软件包/库,所以我尝试给出一个通用的解决方案,您必须根据自己的情况进行调整。如果你能将回购协议链接到github/packagist上的软件包,我也许能为你调整一下这个例子。谢谢!根据您的回复,我能够更新模块。我的解决方案是在正在调用的模块中的“查看帮助”下添加“别名”和“工厂”部分。如果模块只包含“工厂”部分,我不确定这是否有效,但幸运的是我拥有这些模块,因此我能够更新它们。
return [
    'view_helpers' => [
       'aliases' => [
           'facebookShareUrl' => FacebookModule\Helper\ShareUrlHelper::class,
           'twitterShareUrl'  => TwitterModule\Helper\ShareUrlHelper::class,
       ],
    ]
]
$viewHelperManager = $this->getHelperPluginManager();
$facebookShareUrlHelper = $viewHelperManager->get(FacebookModule\Helper\ShareUrl::class);
$twitterShareUrlHelper = $viewHelperManager->get(TwitterModule\Helper\ShareUrl::class);