我的控制器中的Zend Framework 2自定义库

时间:2013-06-05 15:27:17

标签: php zend-framework2

我正在使用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

如何解决?

谢谢

3 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分: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\前缀的类。

答案 2 :(得分:0)

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

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

然后你可以在你的模块中的任何地方使用它    \ FF ::测试()