私のフォームがあります:Yii2実行JS-スクリプト
$form = ActiveForm::begin([
'id' => 'user-create-form',
'enableAjaxValidation' => true,
'enableClientValidation' => false,
'validationUrl' => Url::toRoute(Yii::$app->controller->id . '/validation'),
'validateOnType' => true,
]);
JS-スクリプトは、このフォームに登録して.keyup()
イベントに関するいくつかのルールに従って、英語の音訳にロシアを行っています。子音の結果がsamname
フィールドに追加されます。
あり、検証ルールはUserCreateForm
モデルである:
public function rules()
{
return [
[['samname'], 'validateUserExist'],
];
}
public function validateUserExist()
{
$check = Yii::$app->CustomComponents->checkUserExist($this->samname);
if ($check) {
$errorMessage = 'User exists: ' . $check;
$this->addError('samname', $errorMessage);
}
}
機能作成した名前の既存のcheckUserExist()
チェックし、一致する場合にエラーを返します。
あり、コントローラのアクションは次のとおりです。...それは素晴らしい、検証が行われ、一致した場合はエラーを返し作品
public function actionValidation()
{
$model = new UserCreateForm();
if (\Yii::$app->request->isAjax && $model->load(\Yii::$app->request->post())) {
\Yii::$app->response->format = Response::FORMAT_JSON;
echo json_encode(ActiveForm::validate($model));
\Yii::$app->end();
}
}
しかし!
JSスクリプトが再度実行され、エラー時に名前に次の文字が追加される必要があります(JSスクリプトはこの機能を提供します)。バリデータがエラーを返した後にJSスクリプトを再実行するには?
は、私はそれはあなたを助けることができると思う:https://yii2-cookbook.readthedocs.io/forms-activeform-js/ – yafater
@yafaterは、私が使用する必要があるとどのように正確に使用しているものイベントを理解していませんそれ。あなたは私を助けてくれますか? – rsnd
どうすれば教えてあげますか? – yafater