我想知道在guests
中处理Yii2
的推荐方法通常是什么。
例如,当您有登录用户时,您可以通过以下呼叫获取他们的详细信息:
$user = Yii::$app->user->identity;
然后,您可以执行以下内容,具体取决于您为他们提供的详细信息:
$user->username;
$user->email;
但是,很明显,当我们guest
Yii::$app->user->identity
返回null
时。
在我的情况下,我经常需要检查用户是访客还是登录用户,因此必须在不同的地方重复这样的代码:
if (Yii::$app->user->isGuest) {
$username = Yii::t('general', 'Guest');
} else {
$username = Yii::$app->user->identity->username;
}
...到处做这件事显然不是很容易维护,所以我想提出一个解决方案,我可以在不用检查的情况下引用用户名 - 但显然我仍然会做客人检查出于安全目的需要的地方,但我试图编写可维护的代码,因此我想提出一个解决方案,用于我只需要用户名等信息的目的。
我不确定目前是否有任何建议的方式在Yii2
中执行此操作,但我想也许可以扩展yii\web\User
类并执行以下操作:
public function getIdentity() {
$identity = parent::getIdentity();
if (empty($identity)) {
$identity = new stdClass();
$identity->username = Yii::t('general', 'Guest');
}
return $identity;
}
这是实现我想要的方法还是更好的方法?
答案 0 :(得分:3)
扩展用户是一个好主意,但你最好添加新的方法,如getUsername()或getAttributes()返回身份/来宾默认数据。 你的方法将破坏User的'getIsGuest'方法,该方法基于'getIdentity'null / not null return。而且我相信这种方法很重要,改变它的反应可能会破坏你应用中的很多其他东西。
更新。 您可以在config-> components-> user-> class:
中设置扩展用户类[
'components' => [
'user' => [
'class' => 'my\namespace\User'
]
]
]