【问题标题】:How to include third party lib in Zend Framework 2如何在 Zend Framework 2 中包含第三方库
【发布时间】:2013-04-14 15:02:08
【问题描述】:

我正在将应用程序从 ZF1 迁移到 ZF2。我有一个控制器依赖于第三方库“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') 在运行时被调用。

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

【问题讨论】:

  • 你为什么不用作曲家? wiki.solarium-project.org/index.php/…
  • Zend Framework 2 与 ZF1 非常不同。所以这个线程是新问题。
  • 我刚刚在作曲家中启用了日光浴室,并将代码更改为“$client = new Solarium\Client($config);”。但是还是有类似的错误:“Fatal error: Class 'Stock\Controller\Solarium\Client' not found in”。
  • @user1633272 您缺少反斜杠。试试这个:$client = new \Solarium\Client($config);.

标签: zend-framework2 autoload


【解决方案1】:

正如 Aydin Hassan 在他的评论中所写,完成这项工作的最简单方法是使用 Composer。首先,在项目的根目录中编辑 composer.json 文件,使其看起来像这样:

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

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

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

【讨论】:

  • 您上面提到的第一种方法不适用于我的环境。错误是“致命错误:在...中找不到类 'Stock\Controller\Autoloader'”。第二种方法效果很好。
  • @user1633272 很抱歉。我不记得确切的方法,因为我通常使用最后提到的方法。也许改用use Solarium\Autoloader
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 2017-04-17
  • 2013-11-27
相关资源
最近更新 更多