3

I've created an entity reference field formatter. It works fine. However, the field formatter will only work properly on entities of type user, so if the referenced entity type is different, I don't want the formatter to appear in the list of options.

I tried adding entity_types = { user } to my annotation for the formatter, but this didn't work. I'm suspecting it cannot even be done, but I thought I'd ask here before opening up an issue in core, to suggest it for future development.

Does anyone know if this can be done, and if it can, how?

1 Answer 1

9

I think this will work...

There is an isApplicable() method in Drupal\Core\Field\FormatterBase. You can implement it in your FieldFormatter class like this:

public static function isApplicable(FieldDefinitionInterface $field_definition) {
  return ($field_definition->getFieldStorageDefinition()->getSetting('target_type') == 'user');
}
5
  • Nice! That worked like a dream. I was looking at annotation, without even considering methods on the class. Much appreciated.
    – Jaypan
    Commented Apr 12, 2017 at 1:27
  • With the same approach we can limit the field formatter to a specific field? Commented Apr 12, 2017 at 15:40
  • If the answer is very different I can post a question, so, let my know Commented Apr 12, 2017 at 15:41
  • 2
    Try changing: getSetting('target_type') to getName() to select based on the field machine name. If you look at the FieldDefinitionStorageInterface in the API, you'll see other available options as well.
    – user72086
    Commented Apr 12, 2017 at 17:33
  • That's perfect, but what do I do if I only want to target "entity references that reference [my entity type]". Currently I can only target a specific field TYPE or a specific FIELD. I want to target "fields that reference a type". Sounds hard :/
    – NikLP
    Commented Sep 24, 2018 at 15:55

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.