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.
Sponsored by SupremePR