Drupal 8を使用する上での最大の問題は、必要なデータを取得できないことです。Drupal 8は、オブジェクトを手動でドリルダウンするのではなく、パブリックメソッドを使用することを望んでいます。問題は、使用可能なメソッドのリストを取得するための一貫した方法を理解できないことです。(それらは魔法のように存在し、私はそれらについて知っているだけのように思われます)=
この例では、ビデオフィールドを持つコンテンツタイプがあるとします。そのフィールドで動画ファイルの生のURLを取得する必要があります。
したがって、ノードID($ 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()がアイテムとして表示されていないからです。それを理解するのに十分な例が周りにあったので、それでもひどくはありません。
しかし、さらに深く見ていくと、ビデオフィールドのエンティティIDを取得してエンティティをロードし、エンティティ内の「uri」フィールドを見つけるのではなく(これは重要な部分です)、知りませんでした。私はD7にいます):この同じコード行ですべてのURIを取得できるメソッドがありました!
$url = \Drupal\node\Entity\Node::load($nid)->field_main_video->entity->getFileUri();
しかし、どうすればこのgetFileUri()が存在することがわかったのでしょうか。 たまたまブログの投稿で偶然見つけました。これにより、D7よりもURIを簡単に取得できるようになります。
結局、この例で私が求めているのは、オブジェクトの各レベルのすべてのパブリックメソッドを、読みやすく理解しやすい方法でどのように見つけるかです。 手動でapi.drupal.orgを検索したり、IDE固有の何かを使用したりするのではなく、これを行うにはdrupal中心(つまり、開発モジュール)の方法があるはずです。