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

Zend framework2 如何在Zend Framework 2中包含第三方库,zend-framework2,autoload,Zend Framework2,Autoload,我正在将应用程序从ZF1迁移到ZF2。我有一个控制器依赖于第三方库“Solarium” namespace Stock\Controller; class BaseController extends AbstractActionController { protected function indexAction() { require_once('Solarium/Autoloader.php'); Solarium_Autoloader::r

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

namespace Stock\Controller;
class BaseController extends AbstractActionController
{
    protected function indexAction()
    {
        require_once('Solarium/Autoloader.php');
        Solarium_Autoloader::register();
“Solarium”位于“vendor”下,在“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\u Autoloader')在运行时被调用


我想知道这是如何发生的,以及如何修复它。谢谢。

正如艾丁·哈桑(Aydin Hassan)在评论中所说,制作这部作品最简单的方法是使用Composer。首先,编辑项目根目录中的
composer.json
文件,如下所示:

"require": {
    "php": ">=5.3.3",
    "zendframework/zendframework": "2.*",
    "solarium/solarium": ">=2.4.0"
}
如果您正在使用,则项目的根目录中也会有Composer本身(
Composer.phar
)。在这种情况下,您可以这样做:

"require": {
    "php": ">=5.3.3",
    "zendframework/zendframework": "2.*",
    "solarium/solarium": ">=2.4.0"
}
cd/path/to/project&&php composer.phar安装solarium/solarium

cd/path/to/project&&php composer.phar安装

否则,只需让Composer在命令行中的任何地方都可用即可。通过执行上述操作,Composer将为您自动加载。在控制器中,您不必担心包含文件,因为使用
spl\u autoload\u register
会自动为您添加文件。您只需要使用名称空间。您可以使用以下两种方法之一:

namespace Stock\Controller;

use Solarium\Autoloader;

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


正如艾丁·哈桑(Aydin Hassan)在评论中所说,制作这部作品最简单的方法是使用Composer。首先,编辑项目根目录中的
composer.json
文件,如下所示:

"require": {
    "php": ">=5.3.3",
    "zendframework/zendframework": "2.*",
    "solarium/solarium": ">=2.4.0"
}
如果您正在使用,则项目的根目录中也会有Composer本身(
Composer.phar
)。在这种情况下,您可以这样做:

"require": {
    "php": ">=5.3.3",
    "zendframework/zendframework": "2.*",
    "solarium/solarium": ">=2.4.0"
}
cd/path/to/project&&php composer.phar安装solarium/solarium

cd/path/to/project&&php composer.phar安装

否则,只需让Composer在命令行中的任何地方都可用即可。通过执行上述操作,Composer将为您自动加载。在控制器中,您不必担心包含文件,因为使用
spl\u autoload\u register
会自动为您添加文件。您只需要使用名称空间。您可以使用以下两种方法之一:

namespace Stock\Controller;

use Solarium\Autoloader;

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


你为什么不使用composer呢?Zend Framework 2与ZF1非常不同。所以这个线程是一个新问题。我刚刚在composer中启用了solarium,并将代码更改为“$client=newSolarium\client($config);”。但仍然存在类似的错误:“致命错误:在“@user1633272”中找不到类'Stock\Controller\Solarium\Client'。您缺少反斜杠。试试这个:
$client=new\Solarium\client($config)。为什么不使用composer的可能重复项?Zend Framework 2与ZF1非常不同。所以这个线程是一个新问题。我刚刚在composer中启用了solarium,并将代码更改为“$client=newSolarium\client($config);”。但仍然存在类似的错误:“致命错误:在“@user1633272”中找不到类'Stock\Controller\Solarium\Client'。您缺少反斜杠。试试这个:
$client=new\Solarium\client($config)。上面提到的第一种方法在我的环境中不起作用。错误为“致命错误:在…中找不到类'Stock\Controller\Autoloader'。第二种方法很好。@user1633272对此表示抱歉。我记不清该怎么做了,因为我通常采用最后提到的方法。也许可以尝试使用Solarium\Autoloader
。您上面提到的第一种方法在我的环境中不起作用。错误为“致命错误:在…中找不到类'Stock\Controller\Autoloader'。第二种方法很好。@user1633272对此表示抱歉。我记不清该怎么做了,因为我通常采用最后提到的方法。也许可以尝试使用Solarium\Autoloader