如何在Yii-2应用程序中设置用户状态(在线/离线)


How do I set the user status (online/offline) in a Yii-2 application

为此,我在Gii生成的用户模型中编写了一个函数,该函数将相应用户表的"状态"字段设置为如下

public function setStatus()
    {
     if (!'Yii::$app->user->isGuest) {
     $this->status = 1;
     }
     else {
         $this->status = 0;
     }
    }

现在在我的控制器中:

public function actionLogout()
    {
        $usr = new 'frontend'models'User;
        $usr->setStatus();
        Yii::$app->user->logout();
        return $this->goHome();
    }

但是Yii抛出了一个错误:

无法重新声明frontend''models''User::tableName();

我试图回显所有自动加载的类,但该类没有自动加载。我该怎么做?

关于您的错误,请检查此相关问题。

很可能您在这个类中定义了两次,并且没有使用IDE,因为大多数IDE都会突出显示这种错误。

至于地位,这毫无意义。使用Yii::$app->user->isGuest检查就足以确定用户是已登录还是访客。但这不适合于确定用户是在线还是离线。

对于这个问题,以前也有类似的问题,例如检查这个问题。

最后,不要使用硬编码状态,而是将它们声明为模型中的常量:

const STATUS_OFFLINE = 1;
const STATUS_ONLINE = 2;

用法:self::STATUS_OFFLINE(在声明它的类内部)或User::STATUS_OFFLINE(不要忘记在使用部分中包含名称空间)。

更新:认为用户只是因为登录才在线似乎是不对的。但是,如果只需要计算登录用户中的在线/离线用户,那么如果只有两个可能的选项,为什么需要状态呢?请改用is_online布尔列。