我使用了来自 github 的骨架 zf2 应用程序
1 回答
这是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 次“混蛋”。