2016-09-23 3 views
8

Я пытаюсь получить доступ к некоторым функциям phpBB из моего приложения Laravel, это касается таких действий, как добавление пользователя, когда регистрация происходит на моем основном сайте и автологинах.Загрузка phpBB в конфликты кода Laravel

PhpBB установлен под /public/forums, и я обновил .htaccess, чтобы разрешить его. Я могу получить доступ и использовать его просто отлично.

У меня есть помощник, который был первоначально создан для codeigniter, но должен перевестись в мир laravel. Я загружая его в качестве помощника, поставив его под приложения, загружая его с помощью

use App\Helpers\phpBBHelper; 

и получить доступ к функции как таковой

$ph = new phpBBHelper(); 
    $ph->addPhpbb3User('dave','password','[email protected]'); 

В верхней части моего помощника у меня есть этот конструктор

public function __construct() { 

    // Set the variables scope 
    global $phpbb_root_path, $phpEx, $cache, $user, $db, $config, $template, $table_prefix; 

    define('IN_PHPBB', TRUE); 
    define('FORUM_ROOT_PATH', 'forum/'); 

    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : FORUM_ROOT_PATH; 
    $phpEx = substr(strrchr(__FILE__, '.'), 1); 
    // Include needed files 
    include($phpbb_root_path . 'common.' . $phpEx); 

    // Initialize phpBB user session 
    $user->session_begin(); 
    $auth->acl($user->data); 
    $user->setup(); 

    // Save user data into $_user variable 
    $this->_user = $user; 
} 

Когда я выполнить код я получаю сервере Ошибка 500

PHP Fatal error: Call to a member function getScriptName() on null in 
/home/ubuntu/workspace/public/forum/phpbb/session.php on line 50 

что эта линия

$script_name = $request->escape($symfony_request->getScriptName(), true); 

Я нашел пост на переполнение стека, что именно относится к моему вопросу, но решение этого вопроса никогда не отвечал

Laravel conflicting

В этой теме это было предположил, что, поскольку оба phpBB и Laravel используют композитор, он вызывает конфликт при загрузке классов. Я не уверен, что это правда.

Но Laravel, безусловно, влияет на phpBB, когда я вызываю $user->session_begin();.

+0

для сеанса конфликта в laravel try SESSION_DRIVER с файлом cookie или memcached в .env –

ответ

5

Я бы предложил не изобретать велосипед и использовать уже закодированное расширение, например lara-auth-bridge. Регистрация - это просто вставка правильных строк в правые таблицы, в частности не знакомые с phpBB3, но вы можете увидеть изменения в базе данных после создания новой учетной записи.

Edit: Вы можете окружить проблемный код в try {} catch {} блока в случае, если ошибка не является фатальной для самой регистрации, так что сервер не будет в конечном итоге с 500

+0

Я посмотрел на мост lara auth, и он заботится о добавлении пользователя. Библиотека, которую я пытаюсь использовать, имеет в ней гораздо больше функциональности. в то время как ваш реквизит работы вокруг него не отвечает на мой первоначальный вопрос. – JaChNo

+0

Ну, вы не указали, какую библиотеку вы пытаетесь использовать в вопросе. Не могли бы вы попытаться завернуть сбойный код в 'try {} catch {}' block? Из приведенного кода мы можем только предположить, что по какой-то причине '$ symfony_request' имеет значение NULL, поэтому вы должны проверить, почему эта переменная не инициализирована. –

+0

Я упомянул, что была библиотека помощников, я должен был уточнить, что функция добавления пользователей не была единственной функцией, которую я хотел. Извиняюсь. но проблема. поскольку для symfony_request не инициализируется, что действительно является корнем проблемы. Если бы я знал, почему это не было инициализировано, я бы понял, что остальное решение будет работать – JaChNo

2

Когда два приложения должны были сообщается, я обновил дважды. PhpBB записывается для обновления с расширением. Вы можете разработать расширение phpBB, которое является API для создания нового пользователя.

Ваше новое расширение использует XML-RPC через HTTP для всех сообщений между вашим приложением laravel и системой форума. Вы определяете маршрут, который получает информацию о новых пользователях, а затем вы анализируете процесс создания в phpbb. Этот способ проще, потому что вы находитесь внутри phpBB/symfony Framework.

В вашем приложении laravel вы должны позвонить API, чтобы начать общение.

+0

HI, я думаю, это альтернатива, но это не отвечает на мой первоначальный вопрос. благодаря – JaChNo

2

Ошибка ясно указывает, что объект symfony_request имеет значение NULL. Несколько раз просмотрев исходный код, я обнаружил, что эта переменная (и многие другие) ожидается в глобальном масштабе.

Кажется, что у вас есть include файл phpBB/app.php. Он создает большую часть необходимых объектов.

обновление:

На самом деле, вы в том число common файла, который делает большую часть первоначальной настройки. Может просто сделать глобальный

$symfony_request = $phpbb_container->get('symfony_request');

будет работать. (Я не могу проверить это сам сейчас, просто бросали идеи)


(если это возможно, хотя, я бы попробовать другую библиотеку. Я не люблю эти глобалам. Никто не делает. Это делает отслеживание вещей и отладки труднее, как показывает этот вопрос)

2

чтобы иметь возможность получить запрос сеанса, вы должны быть уверены, что оба форума PhpBB и приложение Laravel использовать один и тот же вид печенья:

  • Same домен
  • же путь
  • же безопасный флаг

ли эти настройки в порядке?