2016-02-10 76 views
3

我在我的應用程序中使用了dektrium/yii2-user。 並有一個在名爲getID()供應商/ dektrium的user.php的方法,並且此方法可以通過Yii::$app->user->getID()被訪問,並返回已登錄用戶的id獲取用戶資料 - dektrium/yii2用戶Yii2

但是,還有另一種名爲getProfile()的方法,其功能是返回當前登錄用戶的完整配置文件詳細信息。但是,這種方法給了500內部服務器錯誤。

exception 'yii\base\UnknownMethodException' with message 'Calling unknown method: yii\web\User::getProfile()' in ... ... 

我Google了問題,但沒有發現任何...幫助我的鄉親..

回答

6

我相信你可以得到當前登錄的個人資料的用戶是這樣的:

Yii::$app->user->identity->profile; 

因爲Yii::$app->user->identity返回當前用戶 - User對象。

你感到困惑的Yii的Web用戶對象與用戶模式:)

編輯:

Yii::$app->user是指yii\web\User - 用於管理用戶認證狀態的應用組件。

你問用戶組件獲取「身份」是:

IdentityInterface是應該由一個類,它提供的身份信息

在這種情況下實現的接口,Dektrium用戶模型實現IdentityInterface,您可以調用getId並獲取用戶模型的ID。

class User extends ActiveRecord implements IdentityInterface 

此代碼:

Yii::$app->user->identity->profile; 

將返回與User

相關的Profile模型數據,並且您可以訪問它的直接字段:

Yii::$app->user->identity->profile->location; 

詳見dektrium\user\models\Profile


人們總是對yii \ web \ User,IdentityInterface和User模型感到困惑。 包括我自己:對

+0

嘿嘿嘿!我無法弄清楚使用'Yii :: $ app-> user-> identity-> profile;'出來的數據。然而我發現我的代碼問題是:我試圖訪問dektrium的User.php中的方法,默認情況下,代碼'Yii :: $ app-> user-> getProfile;'正在搜索方法** yii \ web \用戶**不在** dektrium /../用戶** – Choxx

+0

更新後的文章解釋如何獲取配置文件數據 – jacmoe

0

試試這個

\app\models\User::findOne(Yii::$app->user->identity->id)->profile; 
+1

最好解釋爲什麼這將有助於讓他理解爲什麼他的公式沒有。 – phaberest

+0

由於我使用了高級改進的模板,因此這種方法不適用於我的案例。 – Choxx

1

如果你有一個用戶($用戶),你可以使用的一個實例getProfile()函數:

$profile = $user->getProfile()->one(); 

並且它從該用戶返回配置文件記錄。

如果沒有用戶的實例,但ID($ USER_ID),你可以得到直接剖面模型的實例:

$profile = Profile::find()->where(['user_id' => $user_id)->one(); 

而且Yii::$app->user是用戶界面模型在您的應用程序定義(dektrium用戶模型在這種情況下):http://www.yiiframework.com/doc-2.0/yii-web-user.html

總結:

$user_id = Yii::$app->user->getID(); 
$profile = Profile::find()->where(['user_id' => $user_id)->one(); 
+0

不,「Yii :: $ app-> user'不是用戶模型的接口,但它可以獲取當前登錄的用戶使用'identity' – jacmoe

+0

public function getId() { $ identity = $ this-> getIdentity(); return $ identity!== null? $ identity-> getId():null; } – jacmoe

+0

@ stig-js您描述的方法效率不高。而不是目前我使用'$ profile = Profile :: findOne(Yii :: $ app-> user-> getID());'這是我認爲比你更好的一個... – Choxx

相關問題