2012-05-10 38 views
42

Tôi đang phát triển một ứng dụng bằng cách sử dụng Symfony2 và học thuyết 2. Tôi muốn biết làm thế nào tôi có thể nhận được Id người dùng hiện đang đăng nhập.Symfony2 nhận id đăng nhập của người dùng

+0

Trong bộ điều khiển symfony2.1, bạn có thể lấy người dùng bằng cách gọi $ this-> getUser(). Tôi nghĩ đây là phiên bản mới của symfony. – PMoubed

Trả lời

112

phiên bản Symfony hiện tại (Symfony 4, Symfony> = 3,2)

Since Symfony >=3.2 bạn chỉ có thể mong đợi một thi UserInterface được tiêm để điều khiển hành động của bạn trực tiếp. Sau đó bạn có thể gọi getId() để lấy định danh của người dùng:

class DefaultController extends Controller 
{ 
    // when the user is mandatory (e.g. behind a firewall) 
    public function fooAction(UserInterface $user) 
    { 
     $userId = $user->getId(); 
    } 

    // when the user is optional (e.g. can be anonymous) 
    public function barAction(UserInterface $user = null) 
    { 
     $userId = null !== $user ? $user->getId() : null; 
    } 
} 

Bạn vẫn có thể sử dụng lưu trữ an ninh thẻ như trong tất cả các phiên bản Symfony kể từ 2.6. Ví dụ, trong điều khiển của bạn:

$user = $this->get('security.token_storage')->getToken()->getUser(); 

Lưu ý rằng các phím tắt Controller::getUser() đề cập trong phần tiếp theo của câu trả lời này không được chấp trong Symfony 3 và được loại bỏ trong Symfony 4,0

Legacy Symfony phiên bản

Cách dễ nhất để truy cập người dùng đã sử dụng để mở rộng bộ điều khiển cơ sở và sử dụng phương pháp tắt getUser() (đã loại bỏ trong Symfony 4):

$user = $this->getUser(); 

Kể từ Symfony 2,6 bạn có thể lấy một người dùng từ lưu trữ thẻ an ninh:

$user = $this->get('security.token_storage')->getToken()->getUser(); 

Trước Symfony 2,6, token đã được truy cập từ các dịch vụ bối cảnh an ninh thay vì:

$user = $this->get('security.context')->getToken()->getUser(); 

Lưu ý rằng dịch vụ ngữ cảnh bảo mật không được chấp nhận trong Symfony 2 và đã bị xóa trong Symfony 3.0.

+2

Câu trả lời hay. Để ** nhận các trường khác từ đối tượng người dùng ** như email, tên hoặc giới tính. Sử dụng như thế này. Để nhận giới tính, ** echo 'Giới tính là:'. $ user-> getGender(); ** – webblover

+0

Không được chấp nhận kể từ phiên bản 2.6, sẽ bị xóa trong 3.0. ! – Zagloo

2

Bạn có thể lấy biến với mã dưới đây:

$userId = $this->get('security.context')->getToken()->getUser()->getId(); 
+1

thực hành không tốt, tên biến phải là '$ userId' – GusDeCooL

13

Trong symfony2, chúng ta có thể có được điều này đơn giản hơn bởi mã này:

$id = $this->getUser()->getId(); 
0

này có thể mặc quần áo trong phương pháp:

/** 
* Get user id 
* @return integer $userId 
*/ 
protected function getUserId() 
{ 
    $user = $this->get('security.context')->getToken()->getUser(); 
    $userId = $user->getId(); 

    return $userId; 
} 

Và cảm ứng $ this-> getUserId()

public function example() 
{ 
    print_r($this->getUserId()); 
} 
Các vấn đề liên quan