我在应用程序模块中创建了一个助手,它工作得很好。当我试图从其他模块(如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'