Php 如何制作视图辅助对象

Php 如何制作视图辅助对象,php,view,zend-framework2,view-helpers,Php,View,Zend Framework2,View Helpers,// 编辑: 我已经解决了我的问题,我想分享解决方案。 制作Zend Framework 2助手的更好方法是: 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

//

编辑: 我已经解决了我的问题,我想分享解决方案。 制作Zend Framework 2助手的更好方法是:

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,";
    }
}

?>
第1步。
第二步

    <?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);
                    },
                ),
            );
        }
?>

第三步

<?php
//file : App_folder/module/Module_name/view/Module_name/index/index.phtml

 $this->sayHello('Dimitri');
?>


感谢大家的帮助。

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

  • 您的
    ViewHelper
    是否具有依赖关系?如果是,则需要一个
    \uu construct()
    函数
  • 您的
    ViewHelper
    是否需要参数?如果是,则需要为
    \u 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
            // ));
        }
    }
    

    然后,您可以在视图文件中通过
    $this->myHelper()
    使用
    ViewHelper
    。顺便说一句,您是否为
    ViewHelper
    名称设置大小写并不重要,因为它的内部大小写会更低。因此
    $this->MyHelper()
    等于
    $this->MyHelper()
    MyHelper
    等于
    MyHelper

    如果你找到了自己问题的解决方案,请发布答案,而不是编辑原始帖子。不看编辑历史;这个问题对将来可能遇到相同问题的其他人没有任何帮助。另外,
    模块中的
    $name
    。php
    ViewPluginManager
    的一个实例(不是字符串)。然后将其传递给一个不存在的构造函数:
    returnnewsayhello($name)。这应该是
    returnnewsayhello()甚至更好;创建一个
    可调用的
    ,而不是通过闭包。Dimi,正如@AlexP所说,你必须将结果发布为答案,或者接受和现有答案。请写一个答案并回滚编辑,以便问题保持在您第一次发布时的状态。否则,该问题可能会被删除,因为它不是一个实际问题,对未来的用户也没有用处
    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);
                }
            )
        );
    }