0

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

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

这是我的 module.config.php 的样子:

return array{
      'controllers'=>array(

           ....
       ),
      'view_manager' => array(
          'template_path_stack' => array(
             'ModuleName' => __DIR__ . '/../view',
           ),    
   ),
   'view_helpers' => array(  
            'invokables' => array(  
                 'mylink' => 'ModuleName\view\Helper\mylinkhelper',   
             ),  
       ),
};

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

echo $this->mylink($someparameter); 

我很感激对此的任何反馈。我真的不知道在这里还能做什么。

4

5 回答 5

0

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

<?php
return array(
    '{module}\View\Helper\{helper}' => __DIR__ . '\View\Helper\{helper}.php',
);
?>

我遇到了同样的问题,这个页面帮助了我。

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

于 2012-12-09T02:10:12.223 回答
0
<?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 是:<?php echo $this->absoluteUrl(); ?>

感谢 evan 创建本教程

于 2012-11-05T18:28:20.757 回答
0

看起来 View Helper 已正确添加到,ServiceManager因为调用mylink()正在尝试创建ModuleName\view\Helper\mylinkhelper.

我会确保可以new College\view\Helper\mylinkhelper();从控制器创建该类,这可能会引发一些线索。还要检查文件名和类名是否正确。

于 2012-10-02T09:00:12.950 回答
0

您的方法是正确的,但可能有两件事会导致您遇到这种麻烦:

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

  2. 您的视图助手无法自动加载。您确定类名正确 ( MyLinkHelper)、命名空间正确 ( College\View\Helper,另见上文) 以及文件名正确 ( MyLinkHelper.php)。你是否在你的模块类中为这个模块启用了类名自动加载?

第三种选择可能是小写的“view”和“mylinkhelper”,就像你通常College\View\Helper\MyLinkHelper用大写的 V、M、L 和 H 写的那样。但既然你在 Windows 上,那应该没关系。我知道对于 Linux,您必须注意类名的大小写敏感性。

于 2012-10-02T13:11:21.810 回答
-1

遇到同样的问题,我自己发现没有包含查看帮助文件。在将其放入控制器进行测试时,它可以工作

例如:require_once('module/Pages/view/Helper/RenderNav.php');

为什么它没有被自动加载?

于 2012-11-05T18:05:37.283 回答