注意:这是一个老问题,这里的答案不再有效(从beta5开始)。请参阅此问题,了解如何使用 ZF2 稳定版本执行此操作。
我已经从手册中查看了此示例。请注意,这是 Zend Framework 的第 2 版。
我创建此助手:
<?php
namespace Mats'Helper;
use Zend'View'Helper'AbstractHelper;
class SpecialPurpose extends AbstractHelper
{
protected $count = 0;
public function __invoke()
{
$this->count++;
$output = sprintf("I have seen 'The Jerk' %d time(s).", $this->count);
return htmlspecialchars($output, ENT_QUOTES, 'UTF-8');
}
}
?>
然后尝试像这样注册它:
return array(
'di' => array('instance' => array(
'Zend'View'HelperLoader' => array('parameters' => array(
'map' => array(
'specialpurpose' => 'Mats'Helper'SpecialPurpose',
),
)),
)),
);
但是在视图中执行此操作时,例如add.phtml
<?php echo $this->specialPurpose(); ?>
它会崩溃,说它找不到帮助者。
但是,在同一个 add.phtml 文件中,我可以做
<?php $helper = new Mats'Helper'SpecialPurpose(); ?>
并可以访问它,所以我想命名空间应该是正确的?
目前我在模块.php中注册了它,但我也在其他地方尝试过。
我的目标是在我的模块的所有视图中访问视图帮助程序,而不必在每个 phtml 文件中创建它的实例,也不必每次在控制器中添加它。
如何实现这一点?谢谢。
ZF2 转移到具有编程工厂的服务管理器,而 di 用作后备工厂。
对于视图,现在有视图管理器,并且由于服务解析在找到工厂后立即停止,通过 di 配置的帮助程序不再工作。
示例 现在应该如何注册帮助程序,您可以在 ZfcUser 模块配置中找到
添加自定义帮助程序非常简单,只需在模块配置文件中添加一行,如下所示:
return array(
'view_manager' => array(
'helper_map' => array(
'specialPurpose' => 'Mats'Helper'SpecialPurpose',
),
),
);