【问题标题】:How to add custom view helpers to Zend Framework 2 (beta 4)如何将自定义视图助手添加到 Zend Framework 2(beta 4)
【发布时间】:2012-06-19 05:55:15
【问题描述】:

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

我从手册中查看了at this example。请注意,这是 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 文件中创建它的实例,也不必每次都在控制器中添加它。 em>

如何做到这一点?谢谢。

【问题讨论】:

    标签: php dependency-injection zend-framework2 zend-view


    【解决方案1】:

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

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

    现在您可以在ZfcUser module config 中找到如何注册助手的示例

    【讨论】:

    • 是的,感觉和我设置其他东西的方式有点不同。我回去工作时会尝试这种方式,谢谢。
    • iirc 本来计划做的和现在差不多,但具有编译器功能,可以将 di 定义编译成工厂。但我不认为我们会有那个编译器,最多在 RC 之后。所以你应该自己创建工厂,这是目前推荐的方法(如在性能与 RAD 中)
    • 是的,它有效!谢谢!太糟糕了 ZF2 手册包含错误,花了我几个小时。
    • 我认为您可以在网上看到的文档来自 ZF 2.0.0b4。在 master 中读取文档源
    • 我使用的是 ZF 2.0.0b4,但我的问题中的手册在很多方面仍然存在差异。所以感谢您的提示,现在构建最新的文档。
    【解决方案2】:

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

    return array(
        'view_manager' => array(
            'helper_map' => array(
                'specialPurpose' => 'Mats\Helper\SpecialPurpose',
            ),
        ),
    );
    

    【讨论】:

      猜你喜欢
      • 2012-07-08
      • 2012-12-21
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多