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

时间:2016-01-12 20:48:17

标签: php yii2

为此,我在Gii生成的User模型中编写了一个函数,用于设置相应用户表的“status”字段,如下所示

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引发了一个错误:

  

无法重新声明前端\ models \ User :: tableName();

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

1 个答案:

答案 0 :(得分:1)

至于您的错误,请检查this related question

您很可能在此类中定义了两次,并且您不使用IDE,因为其中大多数都突出显示此类错误。

至于状态 - 这没有意义。使用Yii::$app->user->isGuest检查足以确定用户是登录还是访客。但这不适用于确定用户是否在线/离线。

至于这个问题,之前有过类似的问题,请查看例如this question

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

const STATUS_OFFLINE = 1;
const STATUS_ONLINE = 2;

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

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