I have a textfield autocomplete field that shows a list of full user names and email addresses as designed but when a user is selected, the user id is displayed in the field; not the name and email address. This is the form element:
$form['people'] = [
'#type' => 'textfield',
'#placeholder' => t('Search by name'),
'#autocomplete_route_name' => 'my_module.people',
];
This is the autocomplete handler in the controller:
public function handleAutocomplete(Request $request) {
$query = $this->database->select('simplenews_subscriber', 'ss');
$or = $query->orConditionGroup()
->condition('pa.address_given_name', '%' .$request->query->get('q') . '%', 'LIKE')
->condition('pa.address_family_name', '%' .$request->query->get('q') . '%', 'LIKE');
$query->leftJoin('simplenews_subscriber__subscriptions', 'sss', 'sss.entity_id = ss.id');
$query->leftJoin('profile', 'p', 'p.uid = ss.uid');
$query->leftJoin('profile__address', 'pa', 'pa.entity_id = p.profile_id');
$query->fields('ss', ['uid', 'mail']);
$query->fields('pa', ['address_given_name', 'address_family_name']);
$query->condition($or);
$query->orderBy('address_given_name');
$query->range(0, 10);
$results = $query->execute()->fetchAll();
$users = [];
foreach ($results as $user) {
$users[] = [
'value' => $user->uid,
'label' => $user->address_given_name . ' ' . $user->address_family_name . ' (' . $user->mail . ')',
];
}
return new JsonResponse($users);
}
The autocomplete textfield populates properly. I just want the first name, last name and email address to show after a selection has been made.