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