yii框架,其中方法未正确保存

时间:2014-09-18 22:34:36

标签: javascript php ajax yii session-variables

我正在使用Yii框架,我正在为用户创建一个注册页面。为了让用户创建帐户,他们需要输入票证代码。弹出一个寡妇表单并填写票证代码,ajax会正确验证它并将其存储为会话变量。弹出窗口关闭,允许用户填写表单的其余部分并提交。然后,表单应验证信息,创建用户,将票证的user_ID重新分配给新的user_ID,然后加载页面/票证/ mytickets。

会发生什么情况,确认故障单存在,将其保存到会话中,创建用户,调用故障单重新分配方法,从不重新分配故障单以及重新加载页面。当我在重新加载时回显页面时,它会显示user_ID和ticket_ID的正确信息。

任何提示都有助于调试这将有所帮助。谢谢

//controler
public function actionRegister()
{

    $model=new User;
    $valid = false;
    //check to see if valid
    if(isset($_POST['User'])){
        $valid = $model->checkValid();
    }
    if($valid)
    {
        $model->attributes=$_POST['User'];
        $user_ID = $model->ID;
        if($model->save()){
            //save ticket to user
            $reassigned = Ticket::model()->reassign_with_IDs($_SESSION['ticket_ID'],$user_ID);
            if($reassigned){
                unset($_SESSION['ticket_ID']);
                //redirect to mytickets
                $this->redirect(array('/ticket/mytickets'));
            }
        }
    }

    $this->render('register',array(
        'model'=>$model,
    ));

}


//model
public static function reassign_with_IDs($ticket_ID,$user_ID){
    $ticket = Ticket::model()->findByPK($ticket_ID);
    $ticket->user_ID = $user_ID;
    if($ticket->save()){
        return true;
    }
    else{
        return false;
    }
}

1 个答案:

答案 0 :(得分:0)

$model->ID仅在$model保存后设置。因此,您的代码应为:

if($valid)
{
    $model->attributes=$_POST['User'];
    if($model->save()){
        //save ticket to user
        $user_ID = $model->ID;
        $reassigned = Ticket::model()->reassign_with_IDs($_SESSION['ticket_ID'], $user_ID);

然而,你可以摆脱reassign_with_IDs函数和不必要的变量user_ID,并使用以下方法明确设置票证:

$reassigned = Ticket::model()->updateByPk($_SESSION['ticket_ID'], ['user_ID'=>$model->ID]);