Php Yii用户模块LastVisite\u未在数据库中设置

Php Yii用户模块LastVisite\u未在数据库中设置,php,yii,yii-extensions,Php,Yii,Yii Extensions,我刚安装了yii webapp,但问题是登录时“lastvisit_at”数据库字段从未更新。它始终设置为默认的“0000-00-00:00:00”。我正在使用netbeans,我已经搜索了整个项目,寻找它的设置位置,我想我看到了函数,但无法让它工作。一般来说,我对Yii和框架还不熟悉,所以我可能只是忽略了一些东西 看起来User.php数组正在设置默认值 我认为问题出在lastVisite()函数中,但我不确定问题出在哪里 User.php public function rule

我刚安装了yii webapp,但问题是登录时“lastvisit_at”数据库字段从未更新。它始终设置为默认的“0000-00-00:00:00”。我正在使用netbeans,我已经搜索了整个项目,寻找它的设置位置,我想我看到了函数,但无法让它工作。一般来说,我对Yii和框架还不熟悉,所以我可能只是忽略了一些东西

  • 看起来User.php数组正在设置默认值
  • 我认为问题出在lastVisite()函数中,但我不确定问题出在哪里
User.php

    public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.CConsoleApplication
    return ((get_class(Yii::app())=='CConsoleApplication' || (get_class(Yii::app())!='CConsoleApplication' && Yii::app()->getModule('user')->isAdmin()))?array(
        array('username', 'length', 'max'=>20, 'min' => 3,'message' => UserModule::t("Incorrect username (length between 3 and 20 characters).")),
        array('password', 'length', 'max'=>128, 'min' => 4,'message' => UserModule::t("Incorrect password (minimal length 4 symbols).")),
        array('email', 'email'),
        array('username', 'unique', 'message' => UserModule::t("This user's name already exists.")),
        array('email', 'unique', 'message' => UserModule::t("This user's email address already exists.")),
        array('username', 'match', 'pattern' => '/^[A-Za-z0-9_]+$/u','message' => UserModule::t("Incorrect symbols (A-z0-9).")),
        array('status', 'in', 'range'=>array(self::STATUS_NOACTIVE,self::STATUS_ACTIVE,self::STATUS_BANNED)),
        array('superuser', 'in', 'range'=>array(0,1)),
                    array('create_at', 'default', 'value' => date('Y-m-d H:i:s'), 'setOnEmpty' => true, 'on' => 'insert'),
                    array('lastvisit_at', 'default', 'value' => '0000-00-00 00:00:00', 'setOnEmpty' => true, 'on' => 'insert'),
        array('username, password, email, superuser, status', 'required'),
        array('superuser, status', 'numerical', 'integerOnly'=>true),
        array('id, username, password, email, activkey, create_at, lastvisit_at, superuser, status', 'safe', 'on'=>'search'),
    ):((Yii::app()->user->id==$this->id)?array(
        array('username, email', 'required'),
        array('username', 'length', 'max'=>20, 'min' => 3,'message' => UserModule::t("Incorrect username (length between 3 and 20 characters).")),
        array('email', 'email'),
        array('username', 'unique', 'message' => UserModule::t("This user's name already exists.")),
        array('username', 'match', 'pattern' => '/^[A-Za-z0-9_]+$/u','message' => UserModule::t("Incorrect symbols (A-z0-9).")),
        array('email', 'unique', 'message' => UserModule::t("This user's email address already exists.")),
    ):array()));
}
LoginController.php

    public function actionLogin()
{
    if (Yii::app()->user->isGuest) {
        $model=new UserLogin;
        // collect user input data
        if(isset($_POST['UserLogin']))
        {
            $model->attributes=$_POST['UserLogin'];
            // validate user input and redirect to previous page if valid
            if($model->validate()) {
                $this->lastVisit();
                if (Yii::app()->user->returnUrl=='/index.php')
                    $this->redirect(Yii::app()->controller->module->returnUrl);
                else
                    $this->redirect(Yii::app()->user->returnUrl);
            }
        }
        // display the login form
        $this->render('/user/login',array('model'=>$model));
    } else
        $this->redirect(Yii::app()->controller->module->returnUrl);
}

private function lastVisit() {
    $lastVisit = User::model()->notsafe()->findByPk(Yii::app()->user->id);
    $lastVisit->lastvisit = time();
    $lastVisit->save();
}
在lastVisite()函数中,尝试更改

$lastVisit->lastvisit = time();
对此

$lastVisit->lastvisit_at = time();

事实上我知道了。当我实现Yii用户模块时,我没有替换登录方法的cmenuurl。一旦我把它换掉,它就可以正常工作。

你确定LastVisite功能执行得很好吗?(试着把一些日志放进去)我试过了,在登录时没有更改db条目。你的User.php文件中有任何函数吗?像“SetLastVisite”之类的??正如darkheir所建议的,试着找出控制器中的lastVisit函数是否执行良好