1

我有一个关于以 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

这是问题所在:

"$form->errorSummary($user);" 为空,注意显示在“$form->error($user,'username');”下

但是,如果我查看 Firebug,我可以在“响应”选项卡下看到:

{"CustomUser_valid_until":["Valid Until 必须大于 \"20121127\"."]}

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

那么,有没有人可以有一个想法?

感谢您阅读我,并为我的近似英语感到抱歉。

祝你有美好的一天 :)

迈克尔

4

2 回答 2

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; ?>
于 2012-11-20T17:46:05.393 回答
0

好吧,我终于明白了什么是错的。这是我的 CActiveForm 中的配置。选项“enableAjaxValidation”在设置为“true”时似乎会产生一些问题。我真的不知道为什么,但我之前的登录表单已经遇到过这个问题。我会尝试解决这个问题。

于 2012-11-21T10:46:32.983 回答