我正在将应用程序从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')。
我想知道这是如何发生的,以及如何解决它。感谢。
答案 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();
}
}