2013-06-05 46 views
1

我使用ZendSkeletonApplication,我有这个目录:在我的控制器Zend框架2自定义库

/home/mydir/vendor/My/library/My/Helper 

包含ff.php(分别为/home/mydir/vendor/My/library/My/Helper/ff.php

我的代码在ff.php

<?php 

namespace My\Helper; 

class FF { 
    public function test() { 
     echo "success !"; 
    } 
} 

而且我的控制器:

<?php 
namespace Application\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 

use My\Helper\FF; 

class IndexController extends AbstractActionController 
{ 
    public function indexAction() 
    { 
     FF::test(); 
     return new ViewModel(); 
    } 
} 

我module.php:

public function getAutoloaderConfig() 
{ 
    return array(
     'Zend\Loader\StandardAutoloader' => array(
      'namespaces' => array(
       __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, 
       'My' => __DIR__ . '/../vendor/My/library/My' 
      ), 
     ), 
    ); 
} 

而且我得到这个错误:Fatal error: Class 'My\Helper\FF' not found in /home/mydir/module/Application/src/Application/Controller/IndexController.php on line 13

如何解决?

谢谢

+0

在你的控制器中,这是行不通的。你可以: 设置'use My \ Helper \ FF',然后像这样'FF :: test()' 调用类,或者像这样调用这个类而不用'use':'\ My \ Helper \ FF :: test ()' – Tounu

回答

6

你应该做这样在你module.phpinit_autoloader.php

 'Zend\Loader\StandardAutoloader' => array(
      'namespaces' => array(
       __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, 
       'My' => __DIR__ . '/../../vendor/My/library/My', 
      ), 
     ), 

这将做的工作:)

编辑:而在你的控制器

<?php 
namespace Application\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 

use My\Helper\FF; 

class IndexController extends AbstractActionController 
{ 
    public function indexAction() 
    { 
     FF::test(); 
     return new ViewModel(); 
    } 
} 

<?php 
namespace Application\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 

class IndexController extends AbstractActionController 
{ 
    public function indexAction() 
    { 
     \My\Helper\FF::test(); 
     return new ViewModel(); 
    } 
} 
+0

我在'init_autoloader中完成了。php',但它不起作用:致命错误:Class'My \ Helper \ FF'在第13行的/home/mydir/module/Application/src/Application/Controller/IndexController.php中找不到' – Pierre

+0

尝试将代码放在'getAutoLoaderConfig()'中的任何'module.php'中。 – Tounu

+0

nop。不起作用:/,看我编辑了我的答案 – Pierre

2

看起来像你的路径是错误的。

如果init_autoloader.php/home/mydir/和图书馆是/home/mydir/vendor/My/library/正确的值自动装卸namespaces数组中指定的

'My' => __DIR__ . '/vendor/My/library/My'

如果您在Module::getAutoloaderConfig()方法处理它,而不是(你应该通过的方式),只需在常数之后将正确的/..序列添加到路径字符串中即可。您的里程可能会有所不同,具体取决于您的Module.php的实际位置。

此外,与其他答案中所述相反,您的确可以导入一个包含use My\Helper的整个包,然后使用其前缀为Helper\前缀的类。

+0

它不起作用。我已经添加了这个''My'=> __DIR__。 '/../vendor/My/library/My''in' Module :: getAutoloaderConfig()' – Pierre

+0

我编辑了我的问题 – Pierre

+0

我不知道你的目录结构,但你只需要弄清楚正确的相对路径,它能有多难? ;) –

0

在您的应用程序模块或任何模块 创建一个文件autoload_classmap.php,并添加它:

<?php 
return array(
    'FF' => 'vendor/My/library/My/Helper/ff.php', 
); 

那么你就可以在任何地方你的模块使用它像 \ FF ::测试()

+0

这不起作用。 'autoload_classmap.php'用于改进'autoload'系统,而不是设置它。 – Tounu

+0

这不是正确的做法..但它工作正常 – graphicmist