Submitted by solam on
Bonjour,
je souhaite créer un formulaire avec des champs liés pour simplifier je vais utiliser ici l'exemple (pays, villes...)
je souhaite récupérer le ID de pays et lancer la requête sql pour récupérer la ville
l'utilisateur peut taper les premières lettres de la ville et l'autocompletion propose les villes correspondantes.
ci-après mon code, mais ne l'autocompletion ne fonctionne, 0 renvoie, je pense que la fonction Callback ne marche pas bien.
avez vous une idée ? d'avance merci
public function buildForm(array $form, FormStateInterface $form_state){
//create a $form API array
$form['Countries'] = [
'#type' => 'select',
'#title' => $this->t('Countries'),
'#empty_option'=>t('- select -'),
'#options' => [
'france' => $this->t('France'),
'espagne' => $this->t('Espagne'),
],
'#ajax' => array(
'callback' => '::CityCallback',
'event' => 'change',
'method' => 'replace',
),
'#required' =>TRUE,
];
$form['city'] = [
'#type' => 'textfield',
'#title' => $this->t('city'),
'#default_value' => '',
'#autocomplete_route_name'=> 'city_module.autocomplete_city',
'#autocomplete_route_parameters'=> array(),
];
return form;
}
public function CityCallback(array &$form, FormStateInterface $form_state){
$countrie = $form_state->getValue('Countries');
$form['city'] = [
'#type' => 'textfield',
'#title' => $this->t('city'),
'#default_value' => '',
'#autocomplete_route_name'=> 'city_module.autocomplete_city',
'#autocomplete_route_parameters'=> array('contrie'=>$contrie),
];
return $form;
}
public function autoCity(Request $request, $countrie){
$intupcity=$request->query->get('q');
$cities = [];
if(!empty($intupcity)){
$results = $this->basestorage->getCity($intupcity,$countrie);
foreach($results as $result){
$cities[] = $result->city;
}
}
return new JsonResponse($cities);
}
public function getCity($city, $country)
{
$req = $this->database->select('base.country','c');
$req->distinct();
$req->fields('c',array('City','id_country''));
$req->innerJoin('base.city','cty', 'c.id = cty.id_country');
$req->fields('cty',array('Famille'));
$req->condition('country',$country,'=');
$req->condition('city', $city."%",'LIKE');
$reponse = $req->execute();
return $reponse;
}