如何在Zend Framework 2中包含第三方库

时间:2013-04-14 15:02:09

标签: zend-framework2 autoload

我正在将应用程序从ZF1迁移到ZF2。我有一个控制器依赖于第三方lib'Solarium'。

namespace Stock\Controller;
class BaseController extends AbstractActionController
{
    protected function indexAction()
    {
        require_once('Solarium/Autoloader.php');
        Solarium_Autoloader::register();

'日光浴'存在于'供应商'下,而在'init_autoloader.php'中我有:

set_include_path(implode(PATH_SEPARATOR, array(
    realpath('vendor')
)));

但是,当我查看页面时,出现了错误:

Fatal error: Class 'Stock\Controller\Solarium_Autoloader' not found in ...

我尝试在'StandardAutoloader.php'中添加跟踪,发现在运行时调用了StandardAutoloader.autoload('Stock \ Controller \ Solarium_Autoloader')。

我想知道这是如何发生的,以及如何解决它。感谢。

1 个答案:

答案 0 :(得分:3)

正如Aydin Hassan在评论中写道,最简单的方法就是使用Composer。首先,编辑项目根目录中的composer.json文件,如下所示:

"require": {
    "php": ">=5.3.3",
    "zendframework/zendframework": "2.*",
    "solarium/solarium": ">=2.4.0"
}

如果您使用Zend Skeleton Application,那么您还将在项目的根目录(composer.phar)中拥有Composer。在这种情况下,您可以这样做:

cd /path/to/project && php composer.phar install solarium/solarium

或者

cd /path/to/project && php composer.phar install

否则只需在命令行中随处可用Composer即可。通过以上操作,Composer将为您处理自动加载。在您的控制器中,您应该不必担心包含该文件,因为spl_autoload_register会自动发生这种情况。您只需使用命名空间。您可以使用以下两种方法之一:

namespace Stock\Controller;

use Solarium\Autoloader;

class BaseController extends AbstractActionController
{
    protected function indexAction()
    {
        Autoloader::register();
    }
}

或者

namespace Stock\Controller;

class BaseController extends AbstractActionController
{
    protected function indexAction()
    {
        \Solarium\Autoloader::register();
    }
}
相关问题