Submitted by silex100 on
Bien. J'ai veux créer un formulaire qui a de champs autocomplete.
Par exemple
Le champs pays contient une liste de pays et les champs régions contient la liste de régions.
Concernant l'autocompletion , si le pays ne pas sélectionne l' autocompletion se fera par l'ensemble de région de tous les pays. Sinon en fonction du pays passer en paramètre.
Comment ai-je fait?
Premièrement, j' ai crée un champs pays, puis j'ai mit l'attribut "#ajax" pour le fonction callback.
$form['pays'] = array(
'#type' => 'select',
'#title' => t('Pays'),
'#description' => t("Choose at least one country."),
"#empty_option"=>t('- select -'),
'#options' => array('france'=>'france','angletere'=>'angletere','maroc'=>'maroc','kenya'=>'kenya'),
'#ajax' => array(
'event' => 'change',
'wrapper' => 'regions-wrapper',
// Could also use ['::regionCallback'].
'callback' => [$this,'regionCallback'],
'method' => 'replace',
),
);
Deuxièmement le champs régions avec comme attribut autocomplete_route_name sans paramétré.
$form['regions'] = array(
'#type'=> 'textfield',
'#title' => $this->t('Region'),
'#description' => t("Tapez your region"),
'#autocomplete_route_name'=>'fapi.oxil_autocomplete',
'#autocomplete_route_parameters'=>array(),
);
Et fin fonction Callback, qui récupéré le champs quand il change [ 'event']
public function regionCallback(array $form, FormStateInterface $form_state){
$pays = $form_state->getValue('pays');
$description = $form_state->isValueEmpty('pays')? t(" Not changed yet"): $form_state->getvalue('pays') ;
$form['regions'] = array(
'#type'=> 'textfield',
'#title' => $this->t('Region'),
// Significant of Part
'#value'=>t($pays), // #default_value
'#description'=> t("Watch your choice ").$description,
'#autocomplete_route_name'=>'fapi.oxil_autocomplete',
'#autocomplete_route_parameters'=>array('pays'=>$pays),
);
return $form['regions'];
}
Mais quand on sélectionne un pays, la fonction callback marche très bien , excepté ces attributs ne marche pas
- #default_value
- #description
- '#autocomplete_route_name'=>'fapi.oxil_autocomplete',
- #autocomplete_route_parameters'=>array('pays'=>$pays),
Merci pour vos possibles réponse.