Интеграция SMF-Forum y Zikula (symfony на основе) - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь интегрировать эти два программного обеспечения с такими функциями, как вход / выход, регистрация и т. Д. c. Во-первых, я sh скажу, что SMF-Forum будет главной системой, поэтому, когда произойдет действие в SMF-Forum, оно будет скопировано в Zikula (проект на основе Symfony). Для этого я использую хуки в SMF. Я создал этот файл и запустил в своем браузере: hooks. php:



if (file_exists(dirname(__FILE__) . '/SSI.php') && !defined('SMF'))
    require_once(dirname(__FILE__) . '/SSI.php');
elseif (!defined('SMF'))
    exit('<b>Error:</b> Cannot install - please verify you put this in the same place as SMF\'s index.php.');

$zkDir = dirname($boarddir, 1). '\zk2015fresh\test.php';

$hooks = array(
    'integrate_pre_include' => $zkDir,
    'integrate_logout' => 'zikula_logout',
);

foreach ($hooks as $hook => $function)
    add_integration_function($hook, $function);

С помощью "integrate_pre_include" SMF может загрузить файл до того, как будет выполнена любая функция ловушек. Для этого примера я буду использовать функцию выхода из системы. В этом файле я попытаюсь выполнить выход из системы в Zikula, но для этого мне нужно загрузить все классы Zikula (на основе Symfony). test. php:

<?php

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Zikula\ExtensionsModule\Api\ApiInterface\VariableApiInterface;
use Zikula\UsersModule\Helper\AccessHelper;
use Zikula\UsersModule\Entity\RepositoryInterface\UserRepositoryInterface;
use Zikula\UsersModule\Entity\UserEntity;

require_once 'lib/bootstrap.php';

$request = Request::createFromGlobals();
$kernel->boot();
$container = $kernel->getContainer();


function zikula_logout(&$memberName)
{
    global $kernel, $container;

    $userRepository = $container->get('zikula_users_module.user_repository');
    $zkUser = $userRepository->findOneBy(['uname' => $memberName]);

    $ah = $container->get('zikula_users_module.helper.access_helper');
    $la = $ah->loginAllowed($zkUser);
    if ($la == true){
        $ah->login($zkUser, true);
    }
    $ah->logout();
}

?>

Сначала я запускаю ядро ​​и извлекаю контейнер Symfony, чтобы получить любой сервис. Но это не работает, потому что ядро ​​и контейнер пуст / потерян

Я тоже попробую это: test. php

<?php

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Zikula\ExtensionsModule\Api\ApiInterface\VariableApiInterface;
use Zikula\UsersModule\Helper\AccessHelper;
use Zikula\UsersModule\Entity\RepositoryInterface\UserRepositoryInterface;
use Zikula\UsersModule\Entity\UserEntity;

function zikula_init()
{
    require 'lib/bootstrap.php';

    $request = Request::createFromGlobals();
    $kernel->boot();
    $container = $kernel->getContainer();
    return $container;
}

function zikula_logout(&$memberName)
{
    global $kernel;
$container = zikula_init();
    $userRepository = $container->get('zikula_users_module.user_repository');
    $zkUser = $userRepository->findOneBy(['uname' => $memberName]);

    $ah = $container->get('zikula_users_module.helper.access_helper');
    $la = $ah->loginAllowed($zkUser);
    if ($la == true){
        $ah->login($zkUser, true);
    }
    $ah->logout();
}

?>

Здесь у меня загружена переменная контейнера, но когда предложение $userRepository = $container->get('zikula_users_module.user_repository'); достигнуто, userRepository пуст. Как я мог интегрировать эти два программного обеспечения?

...