2017-07-04 12 views
1

入力したテキストの長さを確認しようとしていますが、成功しません。私はthe field is emptyエラーが発生しますが、鉱山の検証ではないので、requiredルールで動作しています。私のカスタムルールは、フォームの送信時にのみ機能します。フォームのAjax検証を有効にしようとしましたが、もう一度何も試みませんでした。テキスト長のカスタムAjax検証が機能しないyii2

public function rules() 
    { 
     return [ 
      [['author_id', 'title', 'review'], 'required'], 
      [['author_id'], 'integer'], 
      [['review'], 'string'], 
      [['review'], function($attribute, $params){ 
       if(strlen($this->$attribute) < 10){ 
        $this->addError($attribute, 'The review is too short! Minimum 10 symbols!'); 
       } 
      }], 
      [['review'], 'trim'], 
      [['dt'], 'safe'], 
      [['title'], 'string', 'max' => 255], 
      [['author_id'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['author_id' => 'id']], 
      [['post_id'], 'exist', 'skipOnError' => true, 'targetClass' => News::className(), 'targetAttribute' => ['post_id' => 'id']], 
     ]; 
    } 

マイ形式:

<?php $form=\yii\bootstrap\ActiveForm::begin([ 
           'method' => 'post', 
           'options' => [ 
            'id' => 'textarea_' . $model->id . '', 
            'class' => "textarea_review" 
           ], 

          ]) ?> 

          <input type="hidden" name="flag" value="1"/> 
          <input type="hidden" name="model_id" value="<?= $model->id ?>"/> 
          <?= $form->field($model, 'review')->textarea(['id'=>'update_text_'.$model->id.''])->label(false) ?> 
          <?= $form->field($model, 'csrf_token')->hiddenInput(['value' => $session['token']])->label(false) ?> 

          <?= Html::button('Изпрати', ['onclick'=>'editComment('.$model->id.')', 'class'=>'btn btn-primary send-button']) ?> 
          <?php \yii\bootstrap\ActiveForm::end() ?> 

は、事前にありがとうございます!

答えて

1

は、おそらくインラインバリデータをスキップし、次のようにstringルールを定義するあなたのための最適なソリューションです にajax検証を使用しています。

上記のいずれにも該当しない場合は、PHPの検証ルールを書くだけで解決できます。 ブラウザに同じ検証ロジックを実装するためにクライアントサイドスクリプトを提供する必要があります。

カスタムバリデータクラスを定義し、clientValidateAttribute() をオーバーライドしたり、あなたがあなたのカスタムルールで使用しているインラインバリにclientValidateプロパティを指定することもどちらか。
yii\validators\InlineValidatoryii\validators\Validatorの区別に従ってください。

+0

ありがとうございました!今のところ私は最初のオプションを使用します。 –

1

クライアント側の検証では、whenClientプロパティを設定する必要があります。ここでは、javascript検証を行います。

ここドキュメント:あなたはabsoluteltyカスタムバリデータ、次善のオプションが必要な場合は

[['review'], 'string', 'max' => 10, 'message' => 'The review is too short! Minimum 10 symbols!'] 

Client Side Validation

関連する問題