0

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

4

1 回答 1

4

这是ZF2参考资料的摘录,可以帮助您入门:

14.4.2. 注册助手Zend\View\Renderer\PhpRenderer 组成了一个插件代理来管理助手,特别是 Zend\View\HelperBroker 的一个实例,它扩展了基础插件代理以确保我们有有效的助手可用。HelperBroker 默认使用 Zend\View\HelperLoader 作为它的辅助定位器。HelperLoader 是一个基于映射的加载器,这意味着您只需将希望引用它的助手/插件名称映射到助手/插件的实际类名称。

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

// $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 注册 helpers 的模块中完成;但是,请注意,另一个模块可以注册具有相同名称的助手,因此模块的顺序会影响实际注册的助手类!

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');
    }
}

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

在视图脚本中,您可以根据需要多次调用 SpecialPurpose 助手;它将被实例化一次,然后它会在该 PhpRenderer 实例的生命周期内持续存在。

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

输出看起来像这样:

我已经看过 1 次“混蛋”。我已经看过 2 次“混蛋”。我已经看过 3 次“混蛋”。

于 2012-03-07T00:32:00.353 回答