2013-04-14 4 views
0

Я переношу приложение из ZF1 в ZF2. У меня есть контроллер, зависит от сторонней библиотеки «Солярий».Как включить стороннюю библиотеку в Zend Framework 2

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') вызывается коротышка IME.

Я хочу знать, как это происходит и как его исправить. Благодарю.

+0

возможный дубликат http://stackoverflow.com/questions/1566879/adding-3rd-party-library-to-zendframework –

+0

Почему вы не используете композитора? http://wiki.solarium-project.org/index.php/V3:Installation#Getting_Solarium –

+0

Zend Framework 2 очень отличается от ZF1. Итак, эта тема - новая проблема. – user1633272

ответ

3

Как писал в своем комментарии Айдын Хассан, самый простой способ сделать эту работу - использование 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(); 
    } 
} 
+0

Первый подход, о котором вы говорили выше, не работает в моей среде. Ошибка: «Неустранимая ошибка: Class 'Stock \ Controller \ Autoloader» не найден в ... ». Второй подход работает отлично. – user1633272

+0

@ user1633272 Извините. Я не помню точно, как это сделать так, как обычно я использую последний упомянутый подход. Возможно, попробуйте использовать Solarium \ Autoloader'. – Andy0708

Смежные вопросы