0

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

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') 在运行时被调用。

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

4

1 回答 1

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();
    }
}
于 2013-04-14T16:20:24.773 回答