我看过手册中的at this example。请注意,这是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(); ?>
并且可以访问它,所以我想命名空间应该是正确的吗?
目前我在Module.php中注册了它,但我也在其他地方尝试过。
我的目标是在我的模块中的所有视图中访问视图助手,而不必在每个phtml文件中创建它的实例,而不必每次都在控制器中添加它。
如何实现这一目标?感谢。
答案 0 :(得分:3)
ZF2转移到具有程序化工厂的服务经理,而di则用作后备工厂。
对于视图,现在有视图管理器,并且一旦找到工厂,服务解析就会停止,通过di配置的帮助程序不再有效。
您现在可以在ZfcUser module config
中找到如何注册助手的示例答案 1 :(得分:3)
添加自定义助手非常简单,只需在模块配置文件中添加一行,如下所示:
return array(
'view_manager' => array(
'helper_map' => array(
'specialPurpose' => 'Mats\Helper\SpecialPurpose',
),
),
);