0

我想知道通常推荐的处理方式是guests什么Yii2

例如,当您有一个登录用户时,您可以简单地通过调用获取他们的详细信息,例如:

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

然后,您可以执行以下操作,具体取决于您为他们提供的详细信息:

$user->username;
$user->email;

但是,显然当我们有一个guest Yii::$app->user->identityreturn 时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;

}

这是实现我想要的可取的方法还是有更好的方法?

4

1 回答 1

3

Extending User is a good idea, but you'd better add there new method like getUsername() or getAttributes() returning identity/guest default data. Your way will destroy User's 'getIsGuest' method which is based on 'getIdentity' null/not null return. And I believe this method is essential and changing it's response could break a lot of other things in your app.

UPDATE. You may set your extended User class in config->components->user->class:

[
    'components' => [
        'user' => [
            'class' => 'my\namespace\User'
        ]
    ]
]
于 2015-06-20T12:31:14.477 回答