Allt du behöver är att ringa en AJAX
begäran om att få nödvändiga fält. Gör bara som nedan:
-
(Jag vet inte ditt modellnamn) ta en titt på ditt formulär och se vad som är
id
av dittpatient_name
fält. Det är vanligtvismodelname-fieldname
. Jag antar att ditt modellnamn ärPatient
. Så, ID:t förpatient_name
skulle varapatient-patient_name
. -
Lägg till en ajax-förfrågan (enligt din åsikt).
Koden för att anropa AJAX kan se ut precis som nedan:
$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');
}
});
});");
Anmärkningar:
- Ändra ControllerName i ovanstående kod med din egen.
- Jag antog att ID:t för
city
ochstate
fields har följande id:n:patient-city
ochstate-city
relativt. - patient är en åtgärd i din handkontroll
- Du kan behöva ta bort varningsloggar och anpassa koden ovan
-
Jag övervägde inga villkor för kodrensning. Se till att användardata är korrekta.
- Slutligen lägger du till åtgärdskod i din handkontroll.
Åtgärdskod:
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
]);
}