... //
我已经解决了我的问题,我想分享解决方案。 制作Zend Framework 2 Helper的更好方法是:
Step 1.
<?php
//file : App_folder/module/Module_name/src/Module_name/View/Helper/SayHello.php
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;
class SayHello extends AbstractHelper{
public function __invoke($name = 'Unnamed'){
return "Hello $name,";
}
}
?>
第2步。
<?php
//file : App_folder/module/Module_name/Module.php
public function getViewHelperConfig()
{
return array(
'factories' => array(
// the array key is the name of the invoke function that is called from view
'sayHello' => function($name) {
return new SayHello($name);
},
),
);
}
?>
第3步。
<?php
//file : App_folder/module/Module_name/view/Module_name/index/index.phtml
$this->sayHello('Dimitri');
?>
谢谢大家的帮助。
答案 0 :(得分:2)
创建ViewHelper
是一项简单的任务,根据您的需要分为2-3个步骤。始终第一步是实际创建一个ViewHelper
,这是您必须做出第一个决定的地方。
ViewHelper
是否有依赖关系?如果是,您将需要__construct()
功能ViewHelper
是否需要参数?如果是,您需要为__invoke()
函数一旦评估了两个点,就写下ViewHelper
<?php
// FileName: /module/Application/src/Application/View/Helper/MyHelper.php
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;
class MyHelper extends AbstractHelper
{
// If you have dependencies:
public function __construct(DependencyInterface $dependency)
{
// store dependency as a local property inside class
}
// Put arguments if you need them, if not leave them blank
public function __invoke($arg1, $arg2, ..., $argN)
{
// Have a string being returned directly
// return 'some string';
// Or you could return a rendered view template and pass view variables
// return $this->getView()->render('foo/bar', array(
// $arg1, $arg2, ..., $argN
// ));
}
}
您要做的第二件事是将ViewHelper
注册到ViewHelperManager
。如果你没有依赖关系,你把它放在invokables
配置下,如果你有依赖关系,它将成为factories
条目。
public function getViewHelperConfig()
{
return array(
'invokables' => array(
'MyHelper' => 'Application\View\Helper\MyHelper'
),
// or if it has dependencies
'factories' => array(
'MyHelper' => function($viewHelperManager) {
$serviceLocator = $viewHelperManager->getServiceLocator();
$dependency = $serviceLocator->get('SomeDependency');
return new MyHelper($dependency);
}
)
);
}
然后,您就可以在视图文件中使用ViewHelper
来自$this->myHelper()
。顺便说一下,如果你为ViewHelper
名称配置你的配置并不重要,因为它在内部是低级的。因此$this->MyHelper()
等于$this->myhelper()
而MyHelper
等于myhelper
。