Yii模型方法addError不起作用

时间:2012-11-20 13:07:44

标签: forms yii

我有一个关于以yii形式显示错误的问题。

这是我的控制器:

$custom_user->attributes = $_POST['CustomUser'];
if($custom_user->validate())
{
  ...
  save
  ...
}
else
{
  $custom_user->addError('username', 'Error X');
  $this->redirect(array('access/index'),
                  array('user'=>$custom_user,
                        'tab'=>$tab_person,
  ));
}

这是我的索引视图:

<?php $form=$this->beginWidget('BaseForm', array(
                            'id'=>'user-form',
                           'action'=>Yii::app()->createUrl('person/createUser'))); ?>

 <?php echo $form->errorSummary($user);?>

 <div class="right">
        <?php echo $form->textField($user,'username',array('size'=>30,'maxlength'=>255)); ?>
        <br/><?php echo $form->error($user,'username'); ?>
    </div>
  ...
  ...
 <div style="float: left;">
        <?php echo $form->dateField($user,'valid_from',null,'valid_from_formated'); ?>
        <br/><?php echo $form->error($user,'valid_from'); ?>
 </div>

这是我的BaseForm

public $enableClientValidation = true;
public $enableAjaxValidation = true;
public $clientOptions = array(  'hideErrorMessage'=>false,
                                'validateOnSubmit'=>true,
                                'validateOnChange'=>false,
                                'validateOnType'=>false,
                                'afterValidateAttribute' => 'js:enableSubmitAV',
                                'afterValidate' => 'js:submitFormAV'); // always fires this after

问题在于:

“$形式 - &GT; errorSummary($用户);”是空的 并且注意到显示在“$ form-&gt;错误($ user,'username');”

但如果我查看Firebug,我可以在“响应”标签下看到:

  

{“CustomUser_valid_until”:[“有效期至必须   大于\“20121127 \”。“]}

这是一件好事,因为这意味着我的规则很有效。但是没有显示任何错误。不是这一个,甚至我在控制器中添加的错误“错误X”都没有显示...(我确定我通过了else语句,我试过了。)

那么,有没有人有想法?

感谢您阅读我并抱歉我的大概英语。

祝你有个美好的一天:)

迈克尔

2 个答案:

答案 0 :(得分:1)

您正在重定向,这意味着调用了一个全新的请求,并删除了任何响应。

为什么要重定向到“访问/索引”而不是仅调用视图?如果你确实需要重定向,你肯定可以尝试设置一个flash变量,因为它存储在浏览器的会话中,并将通过重定向保持:

Yii::app()->user->setFlash('username', "Error X");

然后在访问/索引页面上:

<?php if(Yii::app()->user->hasFlash('username')):?>
    <div class="error">
        <?php echo Yii::app()->user->getFlash('username'); ?>
    </div>
<?php endif; ?>

答案 1 :(得分:0)

好吧最后我弄错了。这是我的CActiveForm中的配置。选项“enableAjaxValidation”似乎在“true”时出现问题。我不知道为什么,但我已经有了登录表格的问题。我会尝试解决这个问题。