2017-12-15 17:10:05 2607次浏览 3条回答 0 悬赏 10 金钱

有时出现错误:Undefined property: yii\web\User::$isGuest

LoginLog模型里面是这样的
LoginLog模型关键代码

public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) {
        if ($insert) {
            $this->user_id = $this->user_id? $this->user_id: (Yii::$app->user->isGuest? 0: Yii::$app->user->id);
        }

        return true;
}       

对了 我是通过登录事件触发的
behaviors/AfterLoginBehavior

补充于 2017-12-19 18:43

没有大神知道原因吗

补充于 2017-12-20 21:03

我是在配置文件main.php的user组件添加登录事件行为:

'user' => [
    'identityClass' => 'frontend\models\User',
    'identityCookie' => ['name' => '_identityfrontend', 'httpOnly' => true],
    'enableAutoLogin' => true,
    'loginUrl' => ['user/auth/signin'],
    'idParam' => '_frontend',
    'on beforeLogin' => function($event) {

    },
    'as afterLogin' => 'frontend\behaviors\AfterLoginBehavior',
],

AfterLoginBehavior.php 里面是这样的:

namespace frontend\behaviors;

use Yii;
use yii\web\User;
use frontend\models\LoginLog;

class AfterLoginBehavior extends \yii\base\Behavior
{
    /**
     * @inheritdoc
     */
    public $attribute = 'logged_at';

    public $coin = 10;

    /**
     * @inheritdoc
     */
    public function events()
    {
        return [
            User::EVENT_AFTER_LOGIN => 'afterLogin',
        ];
    }

    /**
     * @inheritdoc
     */
    public function afterLogin($event)
    {
        //if ($model = $event->identity->userInfo) {
        if ($model = $event->identity) {
            $model->login_count += 1;
            $model->prev_login_time = $model->last_login_time;
            $model->prev_login_ip = $model->last_login_ip;
            $model->last_login_time = time();
            $model->last_login_ip = Yii::$app->request->userIP;

           /* if (!Yii::$app->session->isActive) {
                Yii::$app->session->open();
            }

            $model->session_id = Yii::$app->session->id;
            Yii::$app->session->close();*/

            if ($model->save()) {
                $_model = new LoginLog();

                //每天登录赠送1次金币/积分
                $today = date('Ymd');
                $prevDay = date('Ymd', $model->prev_login_time);

                if ($today > $prevDay) {
                    $_model->coin = $this->coin;
                }

                $_model->save(false);

                return true;
            }
        }

        return false;
    }
}
  • 回答于 2017-12-15 17:54 举报

    d对方答复

    1 条回复
    回复于 2017-12-15 18:12 回复

    什么呢 兄台?

  • 回答于 2017-12-16 13:41 举报

    有时出现?可以说清楚些吗
    还有错误代码指向的地方确定是你截图的这段?

    1 条回复
    回复于 2017-12-17 18:46 回复

    应该叫每次登录cookie过期后出现,代码是这个位置
    根据yiidebug查看到的

  • 回答于 2017-12-20 16:40 举报

    先给$isGuest一个定义试试,public $isGuest;

    1 条回复
    回复于 2017-12-20 20:37 回复

    Yii::$app->user->isGuest 这个不是user组件自带的属性吗 怎么还需要定义呢

您需要登录后才可以回答。登录 | 立即注册
tangniyuqi
主管

tangniyuqi 成都

注册时间:2011-12-21
最后登录:2022-08-12
在线时长:18小时1分
  • 粉丝4
  • 金钱370
  • 威望0
  • 积分550

热门问题