2014-11-01 141 views
2

我試圖通過將遺留應用程序置於Web文件夾中,並在請求更新時使用基於新控制器的silex代碼慢慢更換碎片,從而將其包裝在silex中。舊的應用程序是一個扁平的PHP,沒有基於控制器的應用程序,在未來16個月內沒有預算時間來完成重寫。將傳統平面代碼放在Web文件夾中具有所需的效果,如果找到文件,路由不會生效。我現在需要幫助的是將silex配置爲使用其他代碼使用的php會話,反之亦然。將傳統應用程序會話與silex應用程序會話橋接

我發現這個Symfony文章似乎表明了我想要做的一種方式,但這些示例的結構與我們的silex設置的配置方式不同。 http://symfony.com/doc/current/cookbook/session/php_bridge.html

我們如何在silex中啓動會話。 $ app-> register(new 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); 
      } 
     } 
    } 
} 

我希望這可以幫助其他一些人,讓他們從舊的應用程序,是他們的眼中釘遷移到新的編碼風格。希望確保總結我們的研究結果,以確保其他人不必在未來看起來像希望一樣。