zf2跨模块查看助手

时间:2014-06-23 18:32:03

标签: php zend-framework2 view-helpers

我在应用程序模块中创建了一个帮助程序,它完美地运行。当我尝试从其他模块(例如用户)加载它时,它告诉我它无法找到该类。

Class' Application \ View \ Helper \ Footertable'找不到

我尝试将此代码作为应用程序模块放在module.config.php中,即使在用户模块的同一文件中也是如此。

'view_helpers' => array (
    'invokables' => array (
    'footertable' => 'Application\View\Helper\Footertable' 
    ) 
), 

我认为这是自动加载类的问题,但是当你在另一个模块中时,我无法找到有关如何加载此帮助程序的信息

我使用

在视图文件中调用帮助器
$this->footertable()

在应用程序模块中完美运行,但在用户模块中无法正常工作

任何想法?

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

<?php

namespace Application\View\Helper;

use Zend\View\Helper\AbstractHelper;

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

配置中的空格是副本&amp;过去的错误。 我仍有同样的问题:无法从其他模块加载助手

更新完整错误

Fatal error: Class 'Application\View\Helper\Footertable' not found in D:\www\httpdocs\test\vendor\zendframework\zendframework\library\Zend\ServiceManager\AbstractPluginManager.php on line 170

路径

D:\www\httpdocs\test\module\Application\src\View\Helper\Footertable.php

2 个答案:

答案 0 :(得分:1)

您的配置似乎很好。可能问题出在你的助手类签名中。

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

因此,在您的Footertable课程中,只需扩展AbstractHelper并确保您拥有_invoke()方法。这是编写自定义view helpers in documentation的推荐方法。

例如:

<?php

namespace Application\View\Helper;

use Zend\View\Helper\AbstractHelper;

class Footertable extends AbstractHelper
{
    public function __invoke()
    {
        return 'bar';
    }
}

并在您的观看中使用它:

echo $this->footertable();

它应该有用。

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

<强>错误:

'footertable' => 'Application \ View \ Helper \ Footertable' 

<强>正确:

'footertable' => 'Application\View\Helper\Footertable'

答案 1 :(得分:1)

您发布的路径看起来并不正确。应用程序模块的src中的所有文件都应位于名为Application的文件夹中,因为它是您的顶级命名空间。所以路径应该是:

  

d:\ WWW \的httpdocs \测试\模块\应用程序\ SRC \应用程序\视图\助手\ Footertable.php

这可以解释为什么帮助者不能自动加载,但如果是这种情况,我不明白它在应用程序模块中是如何工作的。