我想使用Symfony2的sessions.I做到這一點如何使用命名空間會話中的Symfony2
$session = $this->getRequest()->getSession();
$session->set('token','value');
這工作。但我想在會話中使用名稱空間。文件說
class NamespacedAttributeBag
提供的功能,但我無法弄清楚如何實現它
我想使用Symfony2的sessions.I做到這一點如何使用命名空間會話中的Symfony2
$session = $this->getRequest()->getSession();
$session->set('token','value');
這工作。但我想在會話中使用名稱空間。文件說
class NamespacedAttributeBag
提供的功能,但我無法弄清楚如何實現它
只要打開你的config.yml後進口增加:
parameters:
session.attribute_bag.class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag
它看起來像這樣:
imports:
- { resource: parameters.yml }
- { resource: security.yml }
parameters:
session.attribute_bag.class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag
framework:
# ...
你應該重新定義會話服務,也爲您的屬性包定義服務(如果你檢查session.attribute_bag
默認實現你」會看到這個服務只有class屬性)。
,並注入新的服務,以重新定義會話服務到有
services:
session:
class: Symfony\Component\HttpFoundation\Session\Session
arguments:
- @session.storage
- @your.session.attribute_bag #service id is defined below
- @session.flash_bag
your.session.attribute_bag:
class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag
感謝了很多。這真的很有幫助 – aditya
哇 - 文檔真的不應該提及NamespacedAttributeBag,而不會詳細介紹如何使用它。在敲我的頭後$ session-> registerBag()我很高興找到這個解決方案! – Casey
這很有幫助,但爲什麼不是屬性一致。我設置了一些屬性和下一個函數調用,他們回到了默認值? – gprusiiski
因爲也可以在Symfony2之外使用HTTPFoundation組件,所以t o實現NamespacedUserBags如下:
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag;
$session = new Session();
//first bag
$myAttributeBag = new NamespacedAttributeBag('<your_storage_key_1>');
$myAttributeBag->setName('<your_tag_name_1>');
$session->registerBag($myAttributeBag);
//second bag
$myAttributeBag = new NamespacedAttributeBag('<your_storage_key_2>');
$myAttributeBag->setName('<your_tag_name_2>');
$session->registerBag($myAttributeBag);
$session->start();
根據需要註冊儘可能多的行李,但一定要在開始會話之前做到這一點。現在,您可以包間使用getBag()開關:
$activeBag = $session->getBag('<your_tag_name>');
,並具有典型的方法來訪問的名稱空間袋:
$activeBag->set('tokens/a', 'adsf82983asd');
$activeBag->set('tokens/b', 'daslfl232l3k');
print_r($activeBag->get('tokens'));
僅供參考:這在Symfony 3中不起作用,因爲它們將所有這些類參數剔除。 –