2012-01-09 1 views
2

Я пытаюсь реализовать библиотеку phpBB в Kohana.Kohana 3.2 - библиотека phpBB - работа с абстрактными методами

Я создал папку поставщика в моем модуле и загрузить библиотеку, как это и инициализирует его:

require_once Kohana::find_file('vendor/phpbb_library', 'phpbb_library'); 
$phpbb = new Phpbb_library(); 

Однако после того, как библиотека начинает пытаться включать файлы PHPBB:

// Include needed files 
include($phpbb_root_path . 'common.' . $phpEx); 
include($phpbb_root_path . 'config.' . $phpEx); 
include($phpbb_root_path . 'includes/functions_user.' . $phpEx); 
include($phpbb_root_path . 'includes/functions_display.' . $phpEx); 
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx); 
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx); 

I затем получите следующую ошибку:

ErrorException [ Fatal Error ]: Class user contains 5 abstract methods and must therefore be declared abstract or implement the remaining methods (Kohana_Session::_read, Kohana_Session::_regenerate, Kohana_Session::_write, ...) 

Теперь включенные файлы являются thos e используется phpBB, поэтому, очевидно, я не могу просто изменить их.


решаемые 01/02/2012

После решения, предложенного Michal M я создал свои собственные версии класса Kohana Session и сохранить их в модуле. Файлы мне пришлось копировать, переименовывать и редактировать были:

/system/classes/session.php 
/system/classes/session/cookie.php 
/system/classes/session/exception.php 
/system/classes/session/native.php 

/system/classes/kohana/session.php 
/system/classes/kohana/session/cookie.php 
/system/classes/kohana/session/exception.php 
/system/classes/kohana/session/native.php 

Во всех файлов основные изменения, связанные переодевания имена классов Session к MySiteSession и Kohana_Session к Kohana_MySite_Session. Хотя в файлах /system/classes/kohana было несколько применений переменных, которые также нуждались в изменении имени.

Теперь, чтобы использовать сеанс, я просто звоню MySiteSession::instance().

PHPBB теперь работает как include, поскольку я больше не использую класс Session.

+1

Ошибка инициируется, поскольку у phpBB и Kohana есть класс Session. Для этого нет решения. – shadowhand

+0

Как не может быть никакого решения? CodeIgniter позволяет ему работать: http://codeigniter.com/wiki/phpBB3_library Я думал, что Kohana был смещением рамки CodeIgniter. – diggersworld

+0

Вы на самом деле преуспели в реализации моста? Не могли бы вы поделиться источниками? Спасибо – zinovii

ответ

2

У CI есть разные названия классов. Все классы CI начинаются с CI_, в то время как Kohana не использует никаких префиксов *.

Единственное решение, о котором я могу думать, это рефакторинг класса сеанса Kohana (переименовать его повсюду) или сделать это с помощью библиотек phpBB. Ни один из них не идеален.


*) Только для уточнения, Kohana ли использовать Kohana_, но все их классы вытянуты классами без префиксов.

+0

Я создал новый класс сеанса и использовал его на всех сайтах. В системе есть одно место, которое также использует 'Session :: instance()' в файле 'system/classes/kohana/security'. Который я не знаю, должен ли я измениться или нет. Попробуем расширить его. – diggersworld

+0

Подтвердил, что это сработало и добавило полное объяснение в исходный вопрос. – diggersworld