How to translate Drupal API to functioning code?

by liquidcms   Last Updated January 12, 2018 06:07 AM

I was searching for how to find field info and came across this post: getFieldDefinitions on Drupal 8 (why all these deprecated functions on DP8?).

Which gives an answer of:

Drupal::service('entity_field.manager')->getFieldDefinitions(xxx, xxx);

but my question is generically how would a developer tell from this page on the Drupal API docs: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21EntityFieldManager.php/function/EntityFieldManager%3A%3AgetFieldDefinitions/8.2.x that this needs to be called as a service and that the service is entity_field.manager?

.. and, why does simply:

\Drupal\EntityFieldManager::getFieldDefinitions($etid, $bundle)

not work?

Tags : fields


Answers 2


From the page describing a method, you cannot know if the method is implemented from a service, but if you look at the page describing the class, you will notice the class implements a service.

screenshot

1 service uses EntityFieldManager doesn't mean the code of a service uses EntityFieldManager, but that EntityFieldManager is the class that defines a service. In this case, the machine name of the service is entity_field.manager, as given from the entity_field.manager in core/core.services.yml line.

As for the second question, that is plain PHP. \Drupal\EntityFieldManager::getFieldDefinitions($etid, $bundle) means call the getFieldDefinitions() static method of the \Drupal\EntityFieldManager class. Since \Drupal\EntityFieldManager::getFieldDefinitions() is not a static method, you cannot call it like that, but you need an object, as in $entity_file_manager->getFieldDefinition().

kiamlaluno
kiamlaluno
January 12, 2018 10:42 AM

How can I tell from EntityFieldManager::getFieldDefinitions() that it needs to be called as a service, and that the service is entity_field.manager?

The online docs are quite effective for this. For example, look at the docs for the EntityFieldManager class, which contain an explicit reference:

1 service uses EntityFieldManager

entity_field.manager in core/core.services.yml

  Drupal\Core\Entity\EntityFieldManager


Why doesn't \Drupal\EntityFieldManager::getFieldDefinitions($etid, $bundle) work?

Because getFieldDefinitions is not a static method; you can't call it statically.

Clive
Clive
January 12, 2018 10:46 AM

Related Questions



How would I create conditional fields on install?

Updated October 13, 2016 09:03 AM


D8 - edit fields on display node

Updated March 05, 2018 22:07 PM