Zend框架2 - 如何在视图助手中调用函数

时间:2015-04-21 14:25:59

标签: zend-framework2

我有一个视图助手类

namespace Users\View\Helper;

use Zend\View\Helper\AbstractHelper;

class Userfunctions extends AbstractHelper
{
    protected $count = 0;

    public function test()
    {
       return 'testing';
    }


    public function __invoke($str, $find)
    {
        if (! is_string($str)){
            return 'must be string';
        }

        if (strpos($str, $find) === false){
            return 'not found';
        }

        return 'found';
    }


}

在module.config.php中,我调用了视图助手类,其中在view_helpers数组中调用了Userfunctions。

'view_helpers' => array(  
        'invokables' => array(  
            'Userfunctions' => 'Users\View\Helper\Userfunctions',  
            // more helpers here ...  
        )  
    ),

我想要实现的是,我需要调用测试函数()..

我怎样才能做到这一点..

我知道打电话

echo $ this->用户功能("我"," e");

这将调用invode函数并返回found..but我需要调用测试函数。

谢谢,

2 个答案:

答案 0 :(得分:2)

尝试以下方法:

echo $this->plugin('Userfunctions')->test()

答案 1 :(得分:1)

在视图中按名称$this->userfunctions('me', 'e');调用您的插件实际上只是方法Zend\View\Renderer\PhpRenderer::plugin('userfunctions')的简写,因此使用Bram Gerritsen答案绝对正确。

我要补充的是,许多默认视图助手遵循检查传递给__invoke函数的参数数量的约定,如果没有提供,则返回插件的实例。

例如

namespace Users\View\Helper;

use Zend\View\Helper\AbstractHelper;

class Userfunctions extends AbstractHelper
{
    protected $count = 0;

    public function __invoke($str, $find)
    {
        if (0 === func_num_args()) {
            return $this;
        }

        return $this->render($str, $find);
    }

    public function render($str, $find)
    {
        if (! is_string($str)){
            return 'must be string';
        }

        if (strpos($str, $find) === false){
            return 'not found';
        }

        return 'found';
    }

    public function test()
    {
        return 'testing';
    }
}

然后,您可以访问视图中的所有方法,以及__invoke的默认功能。

$this->userfunctions();
$this->userfunctions()->test();
$this->userfunctions()->render('me', 'e');