2015-01-09 20 views
17

Tôi làm cách nào để có được tên của người dùng đã đăng nhập trong yii2? Tôi có thể lấy sử dụng id vớiLấy tên của người dùng trong yii2

Yii::$app->user->id; 

và tôi biết rằng tôi có thể tìm tên trong cơ sở dữ liệu nhưng tôi muốn một cách trực tiếp. Tên cột trong database có tên "username", nhưng

Yii::$app->user->username; 

không hoạt động và

Yii::$app->user->name;  

không hoạt động hoặc.

Trả lời

26

Khi đăng nhập, thông tin người dùng sẽ được lưu trữ ở số Yii::$app->user->identity.

Để biết thêm thông tin, hãy đọc qua số User Authentication documentation trong hướng dẫn chính thức.

4

Trong khi câu trả lời từ @thepeach hoạt động, bạn thực sự có thể mở rộng thành phần người dùng và thêm các chức năng của riêng bạn để bạn có thể tải chúng qua Yii::$app->user->something như ban đầu bạn đang cố gắng thực hiện.

Tôi muốn mở rộng những thứ như thế này ngay từ đầu, vì vậy tôi sẵn sàng thêm chức năng tùy chỉnh mà không cần phải cấu trúc lại bất kỳ mã nào. Nó hút để làm mọi thứ theo một cách, sau đó phải quay trở lại và sửa chữa 100 điểm mã, bởi vì bạn thay đổi nó sau này.

Đầu tiên, xác định một lớp thành phần sử dụng trong cấu hình của bạn:

'components' => [ 
    'user' => [ 
     'class' => 'app\components\User', // extend User component 
    ], 
], 

Sau đó tạo User.php trong thư mục components của bạn. Nếu bạn chưa tạo thư mục này, hãy tạo nó trong thư mục gốc của ứng dụng của bạn.

user.php

<?php 
namespace app\components; 

use Yii; 

/** 
* Extended yii\web\User 
* 
* This allows us to do "Yii::$app->user->something" by adding getters 
* like "public function getSomething()" 
* 
* So we can use variables and functions directly in `Yii::$app->user` 
*/ 
class User extends \yii\web\User 
{ 
    public function getUsername() 
    { 
     return \Yii::$app->user->identity->username; 
    } 

    public function getName() 
    { 
     return \Yii::$app->user->identity->name; 
    } 
} 

Bây giờ bạn có thể truy cập vào các thông qua Yii::$app->user->something.

Ví dụ, đặt điều này trong một trong những quan điểm của bạn và truy cập vào trang trong trình duyệt của bạn:

<?= \Yii::$app->user->username ?> 

Tôi đã viết một câu trả lời chi tiết hơn here, trong đó bao gồm này một chút sâu hơn.

+1

Bạn có thể chỉ sử dụng '$ this-> identity' thay vì' \ Yii :: $ app-> user-> identity'. – vher2

Các vấn đề liên quan