2

There is the entity_autocomplete field type which I expect should just work for core entities. I have created my own entity using Drupal console and would like to query those entities with an autocomplete field. I understand that you need some sort of callback to query the correct field and return the response.

I've had a good search but can't find any good examples of how to do this. Is there somewhere in core, contrib module or elsewhere that has a good example?

5
  • 1
    The entity reference field and autocomplete widgets work for any entity type (custom or not). You can extend the functionality for your custom entity type, by providing a custom #selection_handler in the render array, but it's not mandatory. See drupal.org/node/2418529 for some examples
    – Clive
    Commented Jan 22, 2019 at 11:45
  • Thank you for your reply. Is there more about the #selection_handler anywhere? Do I need to specify the fields to query for the autocomplete? I did try creating the field and it kicks off the request which I can see in the network tab of developer tools but when I visit the URL directly the response is an empty array.
    – Oliver P
    Commented Jan 22, 2019 at 11:56
  • 1
    That's up to your really, the default selection handler (Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection) covers a lot of use cases so you might not need to. If you do need to, create a plugin based on that class, like Drupal\node\Plugin\EntityReferenceSelection\NodeSelection, and just make the changes you need to in there. But I'd try without specifying a selection handler first, just a sensible #target_type, and see if you even need to extend
    – Clive
    Commented Jan 22, 2019 at 12:01
  • I've just dumped the conditions of the query and found it's only querying the "name" field in the database. If I manually fill out the "name" field in the database then all works fine. I'm happy to set the "name" field and call it job done but I'm curious as to how to get it to query additional/other fields.
    – Oliver P
    Commented Jan 22, 2019 at 12:57
  • See the previous comment - you'll need to write your own selection handler with your own solution for ::getReferenceableEntities(), ::countReferenceableEntities(), ::validateReferenceableEntities(), etc
    – Clive
    Commented Jan 22, 2019 at 13:04

1 Answer 1

-1

Your custom entity needs to specify a "label" key in the annotation. e.g.:

/**
 * @ContentEntityType(
 *   id = "example",
 *   
 *   entity_keys = {
 *     "id" = "id",
 *     "uuid" = "uuid",
 *     "revision" = "revision_id",
 *     "label" = "title",
 *   },
 * }
 */
1
  • This does not address the question.
    – anonymous
    Commented Oct 14, 2021 at 0:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.