如何制作视图助手

时间:2014-02-12 14:04:50

标签: php view zend-framework2 view-helpers

... //

编辑:

我已经解决了我的问题,我想分享解决方案。 制作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');
?>

谢谢大家的帮助。

1 个答案:

答案 0 :(得分:2)

创建ViewHelper是一项简单的任务,根据您的需要分为2-3个步骤。始终第一步是实际创建一个ViewHelper,这是您必须做出第一个决定的地方。

  1. 您的ViewHelper是否有依赖关系?如果是,您将需要__construct()功能
  2. 您的ViewHelper是否需要参数?如果是,您需要为__invoke()函数
  3. 提供参数

    一旦评估了两个点,就写下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