跨模块的Zf2视图助手



我在应用程序模块中创建了一个助手,它工作得很好。当我试图从其他模块(如user)加载它时,它告诉我它找不到类。

类"Application View Helper Footertable"未找到

我试图把这段代码在模块.config.php以及应用程序模块,甚至在用户模块的同一文件。

'view_helpers' => array (
    'invokables' => array (
    'footertable' => 'ApplicationViewHelperFootertable' 
    ) 
), 

我认为这是一个自动加载类的问题,但我找不到关于如何在另一个模块中加载这个helper的信息

我使用

在视图文件中调用helper
$this->footertable()

在应用模块中可以完美工作,但在用户模块中不行

任何想法?

你好,但是我的代码是正确的

<?php
namespace ApplicationViewHelper;
use ZendViewHelperAbstractHelper;
class Footertable extends AbstractHelper{
    protected  $inizioFine;
    protected  $numero;
    public function __invoke($inizioFine,$numero){
        $this->inizioFine = $inizioFine;
        $this->numero = $numero;
        echo  sprintf('Mostra %d a %d di %d record',$this->inizioFine['start'],$this->inizioFine['end'],$this->numero);
    }
}

config中的空格是一个副本&过去的错误。我仍然有同样的问题:不能从另一个模块加载helper

update full error

Fatal error: Class 'ApplicationViewHelperFootertable' not found in D:wwwhttpdocstestvendorzendframeworkzendframeworklibraryZendServiceManagerAbstractPluginManager.php on line 170

路径

D:wwwhttpdocstestmoduleApplicationsrcViewHelperFootertable.php

您发布的路径看起来不对。Application模块的src中的所有文件都应该位于名为Application的文件夹中,因为这是您的顶级名称空间。所以路径应该是:

D: www httpdocs src 程序 模块测试应用程序视图助手 Footertable.php

这就解释了为什么helper不能自动加载,但我不明白它是如何在应用程序模块中工作的

您的配置看起来不错。问题可能出在你的helper类签名中。

因为PhpRenderer组成了一个HelperPluginManager实例来管理helper,所以你的helper应该实现正确注册的HelperInterface(1)。此外,您应该在您的助手中编写一个__invoke()方法,通过方法调用来调用它。(2)

因此,在您的Footertable类中,只需扩展AbstractHelper并确保您有_invoke()方法。这是在文档中编写自定义视图帮助器的推荐方法。

例如:

<?php
namespace ApplicationViewHelper;
use ZendViewHelperAbstractHelper;
class Footertable extends AbstractHelper
{
    public function __invoke()
    {
        return 'bar';
    }
}

在你的视图中像这样使用:

echo $this->footertable();

应该可以。

注意:你还必须在你的模块配置的可调用部分注册所有的帮助(和其他类),没有反斜杠之间的空格:

错:

'footertable' => 'Application  View  Helper  Footertable' 

正确的:

'footertable' => 'ApplicationViewHelperFootertable'

最新更新