formulaires liés

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

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;
}

Forum : 
Version de Drupal :