Wszystko czego potrzebujesz to wywołanie AJAX
prośba o uzyskanie potrzebnych pól. Po prostu zachowuj się jak poniżej:
-
(Nie znam nazwy Twojego modelu)Spójrz na swój formularz i zobacz, jaki jest
id
Twojegopatient_name
pole. Zwykle jest tomodelname-fieldname
. Zakładam, że nazwa twojego modelu toPatient
. Tak więc identyfikatorpatient_name
byłobypatient-patient_name
. -
Dodaj żądanie ajax (w twoim widoku).
Kod do wywołania AJAX może wyglądać tak jak poniżej:
$this->registerJs("$('#patient-patient_name').on('change',function(){
$.ajax({
url: '".yii\helpers\Url::toRoute("controllerName/patient")."',
dataType: 'json',
method: 'GET',
data: {id: $(this).val()},
success: function (data, textStatus, jqXHR) {
$('#patient-city').val(data.city);
$('#patient-state').val(data.state);
},
beforeSend: function (xhr) {
alert('loading!');
},
error: function (jqXHR, textStatus, errorThrown) {
console.log('An error occured!');
alert('Error in ajax request');
}
});
});");
Uwagi:
- Zmień Nazwę kontrolera w powyższym kodzie z własnym.
- Założyłem, że identyfikator
city
istate
pola mają następujące identyfikatory:patient-city
istate-city
stosunkowo. - pacjent jest akcją w kontrolerze
- Może być konieczne usunięcie alertów|logów i dostosowanie powyższego kodu
-
Nie brałem pod uwagę żadnych warunków do czyszczenia kodu. Upewnij się, że dane użytkownika są poprawne.
- Na koniec dodaj kod akcji do kontrolera.
Kod akcji:
public function actionPatient($id){
// you may need to check whether the entered ID is valid or not
$model= \app\models\Patient::findOne(['id'=>$id]);
return \yii\helpers\Json::encode([
'city'=>$model->city,
'state'=>$model->state
]);
}