1

我正在使用 ZendSkeletonApplication 并且我有这个目录:

/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

如何解决?

谢谢

4

3 回答 3

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();
    }
}
于 2013-06-05T15:35:54.003 回答
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\前缀前面。

于 2013-06-05T16:16:08.987 回答
0

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

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

然后您可以在模块中的任何位置使用它,例如 \FF::test()

于 2013-06-05T20:17:08.800 回答