Tudo que você precisa é chamar um
AJAX
pedido para obter os campos necessários. Basta agir como abaixo:-
(não sei o nome do seu modelo) dê uma olhada no seu formulário e veja qual é oid
do seupatient_name
campo. Geralmente émodelname-fieldname
. Presumo que o nome do seu modelo sejaPatient
. Portanto, o id depatient_name
seriapatient-patient_name
.
-
Adicione uma solicitação ajax (na sua opinião).
O código para chamar o AJAX pode ser parecido com o abaixo:
$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');
}
});
});");
Notas:
- Alterar o ControllerName no código acima com o seu próprio.
- Presumi que o id de
city
estate
campos tem o(s) seguinte(s) ID(s):patient-city
estate-city
relativamente. - paciente é uma ação em seu controlador
- Talvez seja necessário remover alertas|logs e fazer alguma personalização no código acima
-
Não considerei nenhuma condição para limpeza de código. Verifique se os dados do usuário estão corretos.
- Por fim, adicione o código de ação ao seu controlador.
Código da ação:
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
]);
}