Я пытаюсь обернуть унаследованное приложение в Silex, помещая его в веб-папку и медленно заменяя фрагменты новым кодом Silex на основе контроллера, когда запрашиваются обновления. Старое приложение представляет собой обычное php, не основанное на контроллере приложение, которое не имеет бюджетного времени в течение следующих 16 месяцев для полной перезаписи. Помещение устаревшего плоского кода в веб-папку дает желаемый эффект, когда, если файл найден, маршруты не вступают в силу. Сейчас мне нужна помощь в настройке Silex для использования сессий php, которые использует другой код, и наоборот.
Я нашел этот пост Symfony, который, кажется, указывает на способ, которым я хочу это сделать, но примеры не структурированы так, как настроена наша установка Silex. http://symfony.com/doc/current/cookbook/session/php_bridge.html
Как мы начинаем сеансы в настоящее время в тишине.
$ app-> register (new ServiceSessionProvider ());
Приносим извинения за отсутствие актуального кода, отредактируем фрагменты кода позже сегодня, когда вернемся к компьютеру.
Любая помощь в интеграции старых сессий приветствуется.
Когда дело дошло до использования одних и тех же сессий, выбор, с которым мы пошли, был … менее чем желательным, но он позволяет нам продолжать наши планы, не препятствуя использованию любого приложения. Текущий план заключается в реализации сеансов, хранимых в базе данных, после того, как мы завершим миграцию кода приложения в Silex.
Мы пошли с опцией, впервые указанной в этом посте Сессия Symfony избегать _sf2_attributes. Это довольно уродливое решение, но учитывает гибкость, которая нам необходима при попытке перенести приложение вовремя с минимальными усилиями. Цель состоит в том, чтобы полностью перенести его в новое приложение Silex, но для этого уходит более года.
Вот как настроен сеанс в нашем приложении Silex. Он использует файловое хранилище.
$app->register(new Silex\Provider\SessionServiceProvider(), array(
'cookie_lifetime' => 86400,
));
$app['session.storage'] = $app->share(function () use ($app) {
return new \Symfony\Component\HttpFoundation\Session\Storage\LegacySessionStorage;
});
Вот копия кода контроллера, расположенная изначально Вот, в случае, если он будет удален в какой-то момент.
<?php
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
/**
* Session sotrage that avoids using _sf2_attributes subkey
* in the $_SESSION superglobal but instead it uses
* the root variable.
*/
class LegacySessionStorage extends NativeSessionStorage
{
const SYMFONY_SESSION_SUBKEY = '_sf2_attributes';
/**
* @inheritdoc
*/
protected function loadSession(array &$session = null)
{
if (null === $session) {
$session = &$_SESSION;
}
parent::loadSession($session);
foreach ($this->bags as $bag) {
$key = $bag->getStorageKey();
if (self::SYMFONY_SESSION_SUBKEY === $key)
{
$bag->initialize($session);
}
}
}
}
Я надеюсь, что это поможет некоторым другим людям перейти на новый стиль кодирования из старого приложения, которое является занозой для них. Хотел бы со временем подвести итоги наших выводов, чтобы другие не смотрели так много в будущем, надеюсь.
Других решений пока нет …