2014-03-24 70 views
1

顯然,每一個關鍵我保存到Symfony2的話進入一個子項下:Symfony的會話避免_sf2_attributes

$session->set('foo', 'bar'); 

會導致:

array('_sf2_attributes' => array('foo' => 'bar')); 

這是一個問題,因爲我建立一個應用程序與舊版代碼進行交互。我想使用Symfony的會話處理程序,但我希望應用程序的舊部分能夠從$_SESSION中讀取。換句話說,我想

$session->set('foo', 'bar'); 

$_SESSION['foo'] = 'bar'; 

有同樣的效果。

我沒有看到任何configuration option來實現這一點。我用我設置爲

session: 
    handler_id: my_app.session_handler 

特定的會話處理程序所以不會是Symfony的使用不同的會話名稱的問題。我能想到的唯一解決方案是在我的客戶會話處理程序(my_app.session_handler)周圍創建一個新的會話處理程序類,用於檢查應用程序是否嘗試訪問_sf2_attributes,但我認爲它非常難看,我甚至不確定是否會工作。

謝謝!

回答

0

這不僅是您必須自己執行的處理程序,但它也應該是您的SessionStorage

默認情況下,Symfony2使用NativeSessionStorage。您應該正在尋找方法loadSession()。正如你所看到的,它初始化與$key會話從getStorageKey()收到,這是與_sf2_attributes這裏初始化 - 在AttributeBag

讓我知道你是否有注射自定義會話存儲問題。

+0

謝謝。我檢查了這個選項,但我不確定這是我能做的最好的。現在我對Session API非常熟悉,但是因爲整個系統對變量引用起作用,所以實現我想要的功能似乎相當困難。 – gphilip

+0

終於想出了這個:https://gist.github.com/tcz/9756112醜陋的地獄,但工程。我在會話配置「storage_id」鍵中使用它,但沒有很好的記錄。謝謝! – gphilip

+0

我有類似的問題,但這次與Memcached,在我的配置文件中我有handler_id:session.handler.memcached 這是在服務中定義的,但我的問題是會話不會存儲到使用$ session-> set('foo','bar'); 有幫助嗎? – Sekai