2013-06-05 52 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