Я пытаюсь интегрировать эти два программного обеспечения с такими функциями, как вход / выход, регистрация и т. Д. 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 пуст. Как я мог интегрировать эти два программного обеспечения?