Hàm bạn có thể sử dụng là user_uid_optional_load () ; không có đối số, nó trả về đối tượng người dùng cho người dùng hiện đang đăng nhập. Nó vẫn sử dụng toàn cục $user
và tải toàn bộ đối tượng từ cơ sở dữ liệu, bao gồm các trường liên quan đến người dùng, nhưng nó tránh mã của bạn vô tình thay đổi nội dung của biến toàn cục $user
, vì nó không được tham chiếu từ mã của bạn.
function user_uid_optional_load($uid = NULL) {
if (!isset($uid)) {
$uid = $GLOBALS['user']->uid;
}
return user_load($uid);
}
Nếu bạn không cần đối tượng đầy đủ, thì bạn có thể sử dụng mã đã được báo cáo trong các câu trả lời khác. Nếu bạn muốn chắc chắn rằng bạn không thay đổi đối tượng toàn cầu, bạn có thể sao chép biến toàn cục thành biến cục bộ, như trong đoạn trích sau.
$account = $GLOBALS['user'];
// Use $account.
Trong Drupal 8, bạn chỉ cần sử dụng phương thức tĩnh \Drupal::currentUser()
để có được tương đương với Drupal 7 $GLOBALS['user']
và \Drupal\user\Entity\User::load(\Drupal::currentUser()->id())
để có được một đối tượng được tải đầy đủ với tất cả các trường API trường của nó. Không còn nguy cơ ghi đè một biến toàn cầu với tất cả các hậu quả.
Trong trường hợp bạn cần chuyển đổi người dùng hiện tại, ví dụ: người dùng ẩn danh, mã bạn sử dụng trong Drupal 8 là mã sau đây.
$accountSwitcher = Drupal::service('account_switcher');
$accountSwitcher->switchTo(new Drupal\Core\Session\AnonymousUserSession());
// Your code here.
// Eventually, restore the user account.
$accountSwitcher->switchBack();