Я вважаю, що найбільшою проблемою в роботі з 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 () як елемент там. Все ще не страшно, адже навколо було достатньо прикладів, щоб це зрозуміти.
У міру того, як я заглиблююсь, те, що я не знав (це важлива частина), це те, що замість того, щоб отримати ідентифікатор сутності відеополя, потім завантажити сутність, потім знайти поле "урі" в об'єкті тощо (наприклад, Я б у D7): Існував метод, який дозволяє мені отримати URI все в цьому ж рядку коду!
$url = \Drupal\node\Entity\Node::load($nid)->field_main_video->entity->getFileUri();
Але як я міг би знати, що існування цього файлаFileUri ()? Я випадково натрапив на це в дописі в блозі. Це дійсно робить УРІ простішим, ніж у D7 ... але тільки якщо ви (магічно) знаєте, які методи існують для кожного "рівня" об'єкта.
Зрештою, в цьому прикладі я запитую: Як ви знаходите всі публічні методи для кожного рівня об’єкта таким чином, щоб його легко читати та розуміти? Зауважте, що, здається, має бути спосіб, орієнтований на друпа (наприклад, модуль devel), щоб це зробити, а не шукати api.drupal.org вручну або використовувати щось специфічне для IDE?