2012-09-05 27 views
12

Tôi cố gắng để sử dụng symfony2 sessions.I làm điều nàyLàm thế nào để sử dụng namespaced Sessions trong Symfony2

$session = $this->getRequest()->getSession(); 
    $session->set('token','value'); 

này hoạt động. Nhưng tôi muốn sử dụng không gian tên trong phiên. Tài liệu nói

class NamespacedAttributeBag 

cung cấp tính năng đó nhưng tôi không thể tìm ra cách để thực hiện nó

Trả lời

14

Chỉ cần mở config.yml của bạn và sau khi nhập khẩu thêm:

parameters: 
    session.attribute_bag.class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag 

Nó trông như thế này:

imports: 
    - { resource: parameters.yml } 
    - { resource: security.yml } 

parameters: 
    session.attribute_bag.class: Symfony\Component\HttpFoundation\Session\Attribute\NamespacedAttributeBag 

framework: 
# ... 
+1

FYI: điều này sẽ không làm việc trong Symfony 3, kể từ khi họ tách ra tất cả các tham số lớp. –

8

Bạn nên xác định lại dịch vụ phiên và cũng xác định dịch vụ cho túi thuộc tính của bạn (nếu bạn sẽ kiểm tra thực hiện mặc định của session.attribute_bag bạn' sẽ thấy rằng dịch vụ này chỉ có thuộc tính lớp).

Và tiêm dịch vụ mới của bạn để xác định lại dịch vụ phiên vào có

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 
+0

Cảm ơn rất nhiều. Nó thực sự hữu ích – aditya

+3

wow - các tài liệu thực sự thậm chí không nên đề cập đến NamespacedAttributeBag mà không đi vào chi tiết hơn về cách sử dụng nó. sau khi đập đầu tôi vào $ session-> registerBag() tôi rất vui khi tìm ra giải pháp này! – Casey

+1

Điều này đã giúp rất nhiều nhưng tại sao không phải là sự bao gồm thuộc tính. Tôi thiết lập một số tài sản và chức năng gọi tiếp theo họ đang trở lại mặc định? – gprusiiski

3

Vì cũng có thể sử dụng Thành phần HTTPFoundation bên ngoài Symfony2, cách t o triển khai NamespacedUserBags như sau:

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(); 

Đăng ký bao nhiêu túi tùy thích, nhưng đảm bảo thực hiện việc này trước khi bạn bắt đầu phiên. Bây giờ bạn có thể chuyển đổi giữa các túi sử dụng getBag():

$activeBag = $session->getBag('<your_tag_name>'); 

và truy cập vào túi namespaced với các phương pháp điển hình:

$activeBag->set('tokens/a', 'adsf82983asd'); 
$activeBag->set('tokens/b', 'daslfl232l3k'); 

print_r($activeBag->get('tokens')); 
Các vấn đề liên quan