yii2 контролировать значение из веб-сервиса с помощью ajax в форме
Я хочу использовать создание формы с помощью activeform, но перед сохранением данных формы я контролирую данные из веб-службы. Так что я использовал ajax для управления данными.
Это basvurukayit/_form.php
<script>
function myFunction()
{
//alert("asdsad");
$.ajax({
url: '<?php echo Yii::$app->request->baseUrl. '/index.php?r=basvurukayit%2Fkontrol' ?>',
type: 'post',
data: {tc:$("#basvurukayit-tc").val() , adsoyad:$("#basvurukayit-adsoyad").val() , babaad:$("#basvurukayit-babaad").val() },
success: function () {
$("#kontroldata").val("1");
},
error:function () {
$("#kontroldata").val("0");
},
});
}
</script>
<div class="basvurukayit-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'tc')->widget(yii\widgets\MaskedInput::class, ['mask' => '99999999999' ]) ?>
<?= $form->field($model, 'adsoyad')->textInput(['maxlength' => true, 'style' => 'text-transform: uppercase']) ?>
<?= $form->field($model, 'babaad')->textInput(['maxlength' => true, 'style' => 'text-transform: uppercase']) ?>
<?= $form->field($model, 'telefon')->widget(yii\widgets\MaskedInput::class, ['mask' => '(999)-999-9999',]) ?>
<?= $form->field($model, 'email')->widget(yii\widgets\MaskedInput::class, [
'clientOptions' => [ 'alias' => 'email' ],
]) ?>
<?= $form->field($model, 'kursid')->dropDownList(ArrayHelper::map(Basvurukurslar::find()->where('durumu=1')->all(),'id','kodu'),
['prompt' => 'Model Seçiniz',]) ?>
<?= Html::textInput('kontroldata',null,['readonly'=>true,'id'=>'kontroldata','hidden'=>true]); ?>
<div class="form-group">
<?= Html::submitButton('Kaydet', ['class' => 'btn btn-success','onclick'=>"myFunction()"]) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
Я проверил переменные tc, adsoyad, babaad с помощью ajax.
basvurukayitcontroller.php
public function actionKontrol()
{
if (Yii::$app->request->isAjax) {
$data = Yii::$app->request->post();
$tc= explode(":", $data['tc']);
$adsoyad= explode(":", $data['adsoyad']);
$babaad= explode(":", $data['babaad']);
$tc= $tc[0];
$adsoyad= imdat::buyukharf($adsoyad[0]);
$babaad= imdat::buyukharf($babaad[0]);
$kpssonuc=imdat::kps($tc);
//var_dump($kpssonuc);exit;
if ($adsoyad==$kpssonuc->Ad." ".$kpssonuc->Soyad and
$babaad==$kpssonuc->BabaAd) {
return true;
}else{
return false;
}
}
}
Эта функция работает. Когда я проверил, если я заполнил правильное значение, ответ вернул true, в противном случае вернул false.
И позже я присваиваю этот ответ скрытому текстовому полю #kontroldata. Я показываю значение ответа в #kontroldata, когда я удалил скрытый атрибут.
Я использую значение #kontroldata для проверки, работает ли процесс ajax или не работает. Соответственно, я показываю ошибку типа "ваша информация не соответствует действительности" или сохраненные данные формы.
Но после всех этих процессов данные формы публикуются, но #kontroldata имеет значение null. Так что я не контролировал успех процесса ajax или нет.
basvurukayitcontroller.php
public function actionCreate()
{
$model = new Basvurukayit();
if ($model->load(Yii::$app->request->post()) ) {
echo "<pre>"; var_dump(Yii::$app->request->post()['kontroldata']);exit;
if (Yii::$app->request->post()['kontroldata']=="1") {
//$a=Basvurukurslar::find()->where("id=".Yii::$app->request->post()['Basvurukayit']['kursid'])->all();
$posts = Yii::$app->db->createCommand('SELECT ucreti FROM basvuru_kurslar where id='.Yii::$app->request->post()['Basvurukayit']['kursid'])->queryAll();
if (count($posts)!=0) {
$model->kursucret=$posts[0]['ucreti'];
}else
$model->kursucret=0;
$model->userid=Yii::$app->user->identity->id;
//echo "<pre>";var_dump($model);exit;
if ($model->save()) {
return $this->redirect(['index']);
}
}else{
Yii::$app->session->setFlash('error','Bilgilerde uyuşmazlık tespit edildi.');
return $this->redirect(['create']);
}
}
return $this->render('create', [
'model' => $model,
]);
}