我正在使用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;
}
}
答案 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]);