Zend框架2自定义库在我的控制器


Zend Framework 2 custom library in my controller

我使用zend骷髅应用程序,我有这个目录:

/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();
    }
}

My 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

如何解决?

谢谢

您应该在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();
    }
}

看来你走错路了。

如果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'前缀之前使用其类。

在应用模块或任何模块中创建autoload_classmap.php文件并加上:

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

,那么您可以在模块中的任何地方使用它' FF::测试()