Я обнаружил, что самая большая проблема в работе с Drupal 8 - я не могу получить нужные мне данные. Drupal 8 хочет, чтобы я использовал публичные методы, а не сверлял вручную объект. Проблема в том, что я не могу найти последовательный способ получения списка доступных методов! (они волшебным образом существуют, и я чувствую, что должен знать о них).
Для этого примера, скажем, у меня есть тип контента с полем видео. Мне нужно получить необработанный URL-адрес видеофайла в этом поле.
Поэтому я бы начал с идентификатора узла ($ nid), и каким-то образом я должен выяснить, как загрузить узел. Это не так уж плохо, потому что есть много примеров. Так что я делаю что-то вроде $node = \Drupal\node\Entity\Node::load($nid);
.
Все идет нормально. Затем мне нужно получить значение моего видео поля (field_main_video). Я НАВСЕГДА понял, потому что в сети есть противоречивая документация. Наконец, я понял, что мне нужно сделать что-то вроде этого (потому что это многозначный элемент):
$video = \Drupal\node\Entity\Node::load($nid)->field_main_video->getValue();
... затем цикл по массиву и т. д. Использование kint также не помогло мне найти это. Потому что, например, если я kint($node)
и смотрю под методами, я не вижу getValue () как элемент там. Все еще не ужасно, потому что было достаточно примеров, чтобы понять это.
Однако когда я углубляюсь, то, чего я не знал (это важная часть), было то, что вместо того, чтобы получать идентификатор сущности поля видео, затем загружать сущность, затем находить поле «uri» в сущности и т. Д. (Например, Я бы в D7): был метод, который позволяет мне получить URI все в той же строке кода!
$url = \Drupal\node\Entity\Node::load($nid)->field_main_video->entity->getFileUri();
Но как я мог знать, что этот getFileUri () существует? Я случайно наткнулся на это в сообщении в блоге. Это действительно делает получение URI легче, чем в D7 ... но только если вы знаете (волшебным образом), какие методы существуют для каждого «уровня» объекта.
В конце этого примера я спрашиваю: как найти все общедоступные методы для каждого уровня объекта так, чтобы их было легко читать и понимать? Заметьте, что, похоже, должен быть друпалцентричный (т.е. модуль devel) способ сделать это, а не искать вручную api.drupal.org или использовать что-то специфичное для IDE?