Drupal 8을 사용할 때 가장 큰 문제는 필요한 데이터를 얻을 수 없다는 것입니다. Drupal 8은 객체를 통해 수동으로 드릴 다운하는 대신 공용 메소드를 사용하기를 원합니다. 문제는 사용 가능한 방법 목록을 얻는 일관된 방법을 알 수 없다는 것입니다! (마 법적으로 존재하며, 나는 그들에 대해 알아야한다고 생각합니다). =
이 예제에서는 비디오 필드가있는 컨텐츠 유형이 있다고 가정하겠습니다. 해당 필드에 비디오 파일의 원시 URL을 가져와야합니다.
그래서 노드 ID ($ nid)로 시작하고 어떻게 든 노드를로드하는 방법을 알아야합니다. 많은 예제가 있기 때문에 이것은 나쁘지 않습니다. 그래서 나는 같은 것을 $node = \Drupal\node\Entity\Node::load($nid);
합니다.
여태까지는 그런대로 잘됐다. 그런 다음 비디오 필드의 값을 가져와야합니다 (field_main_video). 'net 주위에 충돌하는 문서가 있기 때문에 이것을 알아 내야했습니다. 마지막으로 나는 다중 값 항목이기 때문에 이와 같은 작업을 수행해야한다는 것을 알았습니다.
$video = \Drupal\node\Entity\Node::load($nid)->field_main_video->getValue();
... 그런 다음 배열을 통해 루프합니다. kint를 사용하면 이것을 찾는 데 도움이되지 않았습니다. 예를 들어, 내가 kint($node)
메서드를 살펴보면 getValue ()가 항목으로 표시되지 않기 때문입니다. 그것을 알아낼 충분한 예가 있었기 때문에 여전히 끔찍한 것은 아닙니다.
더 깊이 들어가면서, 내가 알지 못했던 것은 (이것은 중요한 부분입니다) 비디오 필드 엔티티 ID를 얻은 다음 엔티티를로드 한 다음 엔티티에서 "uri"필드를 찾는 것 등입니다. D7에서 할 것입니다) :이 동일한 코드 줄에서 URI를 모두 얻을 수있는 방법이있었습니다!
$url = \Drupal\node\Entity\Node::load($nid)->field_main_video->entity->getFileUri();
그러나 어떻게 getFileUri ()가 존재하는지 어떻게 알 수 있습니까? 나는 블로그 포스트에서 그것을 우연히 발견했다. 이것은 실제로 D7보다 URI를 더 쉽게 만들 수 있지만 객체의 각 '레벨'에 대해 어떤 방법이 존재하는지 (마 법적으로) 알고있는 경우에만 가능합니다.
결국,이 예제를 통해 질문합니다 : 읽고 이해하기 쉬운 방식으로 객체의 각 레벨에 대한 모든 공용 메소드를 어떻게 찾습니까? api.drupal.org를 수동으로 검색하거나 IDE 고유의 것을 사용하는 대신 drupal-centric (즉, devel 모듈) 방법이 있어야합니다.