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>

ここに私のベースフォームがあります

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":["有効期限は \"20121127\" より大きくなければなりません。"]}

私のルールがうまく機能することを意味するので、それは良いことです。しかし、エラーは表示されません。これではなく、コントローラーに追加したエラー「エラーX」でさえ表示されません...(elseステートメントを通過したと確信しています。試してみました)。

それで、誰でもアイデアを思いつくことができますか?

私を読んでくれてありがとう。おおよその英語でごめんなさい。

良い一日を過ごしてください :)

マイケル

4

2 に答える 2

1

リダイレクトしています。つまり、まったく新しいリクエストが呼び出され、レスポンスが削除されます。

ビューを呼び出すだけでなく、「アクセス/インデックス」にリダイレクトするのはなぜですか? リダイレクトが必要な場合は、間違いなく可能ですが、ブラウザのセッションに保存され、リダイレクトを通じて永続化されるため、フラッシュ変数を設定してみてください。

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 に答える