2014-11-01 2 views
2

Я пытаюсь обернуть устаревшее приложение в silex, поместив его в веб-папку и медленно заменяя куски на новый силекс-код на основе контроллера при запросе обновлений. Старое приложение - это плоское php, не приложение на основе контроллера, которое не имеет бюджетного времени в течение следующих 16 месяцев для полной перезаписи. Размещение устаревшего плоского кода в веб-папке имеет желаемый эффект, если при обнаружении файла маршруты не вступают в силу. Теперь мне нужна помощь в настройке silex для использования php-сессий, которые использует другой код, и наоборот.Преодоление устаревших сеансов приложения с сеансами приложения silex

Я нашел это сообщение Symfony, которое, как представляется, указывает способ, которым я хочу это сделать, но примеры не структурированы так же, как настройка нашей настройки silex. http://symfony.com/doc/current/cookbook/session/php_bridge.html

Как мы начинаем сеансы в настоящее время в силексе. $ app-> register (новый ServiceSessionProvider());

Извините за недостаток актуального кода, отредактируйте с помощью фрагментов кода позже сегодня, когда вы вернетесь на компьютер.

Приветствуется всяческая помощь в интеграции устаревших сессий.

ответ

1

Когда дело доходило до использования одних и тех же сеансов, вариант, с которым мы пошли, был ... менее желательным, но он позволяет нам продолжать наши планы, не препятствуя использованию какого-либо приложения. Текущий план состоит в том, чтобы реализовать хранимые в базе данных сеансы, как только мы завершили перенос кода приложения в Silex.

Мы отправились с опцией, впервые идентифицированной в этом сообщении Symfony session avoid _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; 
}); 

Вот копия кода контроллера, расположенного первоначально here, в случае, если он удаляется в какой-то момент.

<?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); 
      } 
     } 
    } 
} 

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

Смежные вопросы