View zend framework 2中的自定义视图帮助程序错误

View zend framework 2中的自定义视图帮助程序错误,view,helper,zend-framework2,custom-view,View,Helper,Zend Framework2,Custom View,我似乎无法在zend Framework 2.02中注册自定义视图帮助程序。我尝试了此处发布的所有解决方案以及我认为应该做的任何事情,但我一直遇到以下错误: 致命错误:在C:\wamp\vhosts\projectName\vendor\zendframework\zendframework\library\Zend\ServiceManager\AbstractPluginManager.php的第177行中找不到类“ModuleName\view\Helper\MyLink Helper”

我似乎无法在zend Framework 2.02中注册自定义视图帮助程序。我尝试了此处发布的所有解决方案以及我认为应该做的任何事情,但我一直遇到以下错误:

致命错误:在C:\wamp\vhosts\projectName\vendor\zendframework\zendframework\library\Zend\ServiceManager\AbstractPluginManager.php的第177行中找不到类“ModuleName\view\Helper\MyLink Helper”

下面是我的module.config.php的样子:

在我的视图文件中,我有:

echo $this->mylink($someparameter); 

我非常感谢您对此的任何反馈。我真的不知道在这里还能做什么

由于调用mylink试图创建ModuleName\View\Helper\mylink Helper,因此看起来视图帮助程序已正确添加到ServiceManager


我要确保该类可以使用新的College\view\Helper\MyLink Helper创建;从控制员的角度来看,这可能会提供一些线索。还要检查文件名和类名是否正确。

您的方法是正确的,但可能有两个原因导致您出现此问题:

您讨论的是顶级名称空间ModuleName,但在示例配置中,您使用的是顶级名称空间College。当您有一个ModuleName名称空间并尝试加载College时,这显然不起作用

无法自动加载视图辅助对象。您确定类名是正确的MyLinkHelper,命名空间是正确的College\View\Helper,请参见上文,文件名是正确的MyLinkHelper.php。您是否在模块类中为此模块启用了类名自动加载


第三个选项可能是小写视图和mylinkhelper,正如您通常使用大写字母V、M、L和H编写College\view\Helper\mylinkhelper一样。但是,由于您使用的是Windows,所以这对您来说并不重要。我知道对于Linux,您必须注意类名的大小写敏感性。

遇到了同样的问题,我自己发现没有包含view helper文件。当把它放入控制器进行测试时,它工作了

e、 g.:require_once'module/Pages/view/Helper/RenderNav.php'

为什么它没有被自动加载

<?php
// ./module/Application/src/Application/View/Helper/AbsoluteUrl.php
namespace Application\View\Helper;

use Zend\Http\Request;
use Zend\View\Helper\AbstractHelper;

class AbsoluteUrl extends AbstractHelper
{
    protected $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function __invoke()
    {
        return $this->request->getUri()->normalize();
    }
}
您会注意到这个特定的帮助程序有一个依赖项—Zend\Http\Request对象。要注入此功能,我们需要为视图助手设置一个具有初始化逻辑的工厂:

    <?php
    // ./module/Application/Module.php
    namespace Application;

    use Application\View\Helper\AbsoluteUrl;

    class Module
    {
        public function getViewHelperConfig()
        {
            return array(
                'factories' => array(
                    // the array key here is the name you will call the view helper by in your view scripts
                    'absoluteUrl' => function($sm) {
                        $locator = $sm->getServiceLocator(); // $sm is the view helper manager, so we need to fetch the main service manager
                        return new AbsoluteUrl($locator->get('Request'));
                    },
                ),
            );
        }


     // If copy/pasting this example, you'll also need the getAutoloaderConfig() method; I've omitted it for the sake of brevity.
}
就这样!现在,您可以在视图脚本中调用助手:

当前页面的完整URL为:

由于evan创建了这个

,问题在于类文件没有被加载。它应该包含在autoload_classmap.php中

<?php
return array(
    '{module}\View\Helper\{helper}' => __DIR__ . '\View\Helper\{helper}.php',
);
?>
我跑在同一个问题,这页帮助我


由于我是ZF新手,我不知道是否有其他方法可以在autoload_classmap中添加路径,我想可能有,但我只是手动编辑了文件。

谢谢你的回复,Jurian!我的意思是模块化而不是大学。所以第1点不是问题所在。类名正确,命名空间正确,文件名也正确。当你说你在你的模块类中为这个模块启用了类名自动加载吗?我想你的意思是注册模块或者告诉模块管理员关于模块的事情,然后我就这么做了。关于大写字母和小写字母,我也检查了一下,这似乎不是问题。如果您有任何其他想法,请告诉我。autloader意味着您不必在代码中要求“My/File/Name.php”,但是如果您执行新的My\File\Name,您的类将自动加载。例如,您可以使用@DrBeza his方法来检查这一点:在一些运行控制器的代码中,例如,您执行$test=new College\View\Helper\MyLinkHelper来检查类的自动加载是否有效。如果没有,那就是你的问题。如果是这样的话:问题是别的。谢谢贝萨博士。我现在要探索这个选项,因为我想不出任何其他方法来解决这个问题。可能重复的方法之一,我尝试过,但没有运气。我真的很感谢你的帮助。我还没有尝试这个解决方案,但它看起来确实不错。我很快会给你回复结果的。
<?php
return array(
    '{module}\View\Helper\{helper}' => __DIR__ . '\View\Helper\{helper}.php',
);
?>