當談到使用相同的會話時,我們選擇的選項是......並不理想,但它允許我們繼續我們的計劃,而不會妨礙任何一個應用程序的使用。目前的計劃是在完成將應用程序的代碼遷移到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);
}
}
}
}
我希望這可以幫助其他一些人,讓他們從舊的應用程序,是他們的眼中釘遷移到新的編碼風格。希望確保總結我們的研究結果,以確保其他人不必在未來看起來像希望一樣。