如何在zend框架2中添加自定义视图助手?

时间:2012-03-06 15:29:21

标签: model-view-controller zend-framework2

我使用了github的骨架zf2应用程序

1 个答案:

答案 0 :(得分:4)

这里摘录了ZF2引用,可以帮助您入门:

  

<强> 14.4.2。注册助手 Zend \ View \ Renderer \ PhpRenderer组成一个插件代理来管理助手,特别是一个实例   Zend \ View \ HelperBroker,它按顺序扩展了基本插件代理   确保我们有合适的助手。 HelperBroker默认情况下   使用Zend \ View \ HelperLoader作为其辅助定位器。 HelperLoader是   一个基于地图的加载器,这意味着你只需要映射   helper / plugin名称,您希望通过该名称将其引用到实际名称   帮助者/插件的类名。

     

以编程方式,按如下方式完成:

// $view is an instance of PhpRenderer
$broker = $view->getBroker();
$loader = $broker->getClassLoader();

// Register singly:
$loader->registerPlugin('lowercase', 'My\Helper\LowerCase');

// Register several:
$loader->registerPlugins(array(
    'lowercase' => 'My\Helper\LowerCase',
    'uppercase' => 'My\Helper\UpperCase',
));
  

在MVC应用程序中,您通常只需传递一张地图   通过您的配置插入到类中。

// From within a configuration file
return array(
    'di' => array('instance' => array(
        'Zend\View\HelperLoader' => array('parameters' => array(
            'map' => array(
                'lowercase' => 'My\Helper\LowerCase',
                'uppercase' => 'My\Helper\UpperCase',
            ),
        )),
    )),
);
  

以上可以在需要注册帮助程序的每个模块中完成   与PhpRenderer;但是,请注意另一个模块可以   注册具有相同名称的助手,因此模块的顺序可能会产生影响   哪个助手类实际上会被注册!

     

<强> 14.4.3。编写自定义助手编写自定义助手很容易。我们建议扩展Zend \ View \ Helper \ AbstractHelper,但是在   至少,您只需要实现Zend \ View \ Helper接口:

namespace Zend\View;

interface Helper
{
    /**
     * Set the View object
     *
     * @param  Renderer $view
     * @return Helper
     */
    public function setView(Renderer $view);

    /**
     * Get the View object
     *
     * @return Renderer
     */
    public function getView();
}
  

如果您希望您的帮助程序能够被调用,就像它是一样   PhpRenderer的方法调用,你也应该实现一个   帮助器中的__invoke()方法。

     

如前所述,我们建议进行扩展   Zend \ View \ Helper \ AbstractHelper,因为它实现了定义的方法   在Helper中,为您的发展提供一个先机。

     

定义好助手类后,请确保自动加载   它,然后将其注册到插件代理。

     

这是一个示例助手,我们将其命名为“SpecialPurpose”

namespace My\View\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');
    }
}
  

然后假设当我们向插件代理注册它时,我们映射它   字符串“specialpurpose”。

     

在视图脚本中,您可以多次调用SpecialPurpose助手   你喜欢的时间;它将被实例化一次,然后它会持续存在   为了PhpRenderer实例的生命。

// remember, in a view script, $this refers to the Zend_View instance.
echo $this->specialPurpose();
echo $this->specialPurpose();
echo $this->specialPurpose();
  

输出看起来像这样:

     

我看过'The Jerk'1次。我见过'The Jerk'2次。一世   已经看过'The Jerk'3次。

相关问题