0

注意:这是一个老问题,这里的答案不再有效(自 beta5 起)。请参阅问题,了解如何使用 ZF2 稳定版进行操作。

我已经从手册中查看了这个示例。请注意,这是 Zend 框架的第 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(); ?>

并且可以访问它,所以我猜命名空间应该是正确的?

目前我在 Module.php 中注册它,但我也在其他地方尝试过。

我的目标是在我的模块中的所有视图中访问视图助手,而不必在每个 phtml 文件中创建它的实例,也不必每次都在控制器中添加它。

如何做到这一点?谢谢。

4

2 回答 2

3

ZF2 使用程序化工厂转移到服务经理,而 di 用作后备工厂。

对于视图,现在有视图管理器,并且由于服务解析在找到工厂后立即停止,因此通过 di 配置的助手不再起作用。

现在您可以在ZfcUser 模块配置中找到如何注册帮助程序的示例

于 2012-06-16T15:28:10.193 回答
3

添加自定义助手非常简单,只需在您的模块配置文件中添加一行,如下所示:

return array(
    'view_manager' => array(
        'helper_map' => array(
            'specialPurpose' => 'Mats\Helper\SpecialPurpose',
        ),
    ),
);
于 2012-06-17T15:26:05.937 回答