LoginSignup
12
17

More than 5 years have passed since last update.

Drupalにおけるエンティティとは何か

Last updated at Posted at 2019-01-11
1 / 25

今回のプレゼンテーションについて


対象

  • ユーザー、ノード、タームなどの用語が分かる
  • オブジェクト指向プログラミングの「継承」「インスタンス化」などの概念が分かる
  • Drupalのバックエンドについて知りたい

元になってるブログ

スクリーンショット 2019-01-10 13.18.17.png


ソース

動画

ドキュメント

& 会社の先輩達


開発者がエンティティを学ぶ意義


これからはエンティティの時代!

  • エンティティの概念はDrupal7で導入
  • Drupal 8で完成(?)
  • Drupal 8では全てのウェブコンテンツをエンティティ化することがベストプラクティスとされている
  • Drupal 8のドキュメントはエンティティの知識なくしては読めない!
  • エンティティシステムはこれからも進化・洗練されていくことが予想される

なぜエンティティシステムが作られたのか


考えよう!「Drupalサイトで扱うデータにはどんな機能が求められるか?」

ユーザー

  • id、名前、パスワード、メールアドレス、作成日、言語コードなどのデータを持つ
  • ログイン情報や閲覧権限と結びつけることができる
  • データベースに保存できる
  • PHPで加工できる
  • レンダリングできる

ノード(記事)

  • id、タイトル、本文、作成日、言語コードなどのデータを持つ
  • データベースに保存できる
  • PHPで加工できる
  • レンダリングできる

ターム

  • id、ターム名、説明、作成日、言語コードなどのデータを持つ
  • タームをクリックすると同じタームを持つコンテンツ一覧を表示する
  • データベースに保存できる
  • PHPで加工できる
  • レンダリングできる

それらの共通部分は?

  • id、作成日、言語コードを持つ
  • データベースに保存できる
  • PHPで加工できる
  • レンダリングできる

Drupalist達は考えた

かぶってる機能に必要なパラメーターとかメソッドを一つにまとめちゃったら便利なんじゃない?

エンティティシステム爆誕(Drupal 7)

※イメージです


で、エンティティって何よ(´・ω・`)


エンティティシステムとは

  • Drupalサイトのありとあらゆるデータ規格化し、統一された方法で処理できるようにする仕組み
  • サイトのパフォーマンスアップ・開発効率アップが主な目的

「ありとあらゆるデータ」って?

  • ユーザー、ノード、タームなどのウェブコンテンツ
  • 構成(コンフィギュレーション)

エンティティとは

単一のデータをエンティティシステムに適合するように加工したPHPオブジェクト

  • 一人のユーザー
  • 一本のノード(記事)
  • 一つのターム

例(ノード)


 表の顔

スクリーンショット 2019-01-11 13.29.42.png


裏の顔

※ Develモジュールを使った確認方法方法

  • Develモジュールインストール
  • ノードの画面でDevelタブクリック

スクリーンショット 2019-01-11 13.31.44.png

  • LoadタブのVariableをクリック

スクリーンショット 2019-01-11 13.31.30.png

表向きはシンプルでも、裏に大量のパラメーターとメソッドを隠し持っている!!


 エンティティの大量のパラメータとメソッドはどこから来たのか


エンティティはこう作られる

エンティティクラス

Entity | Entity.php | Drupal 8.2.x | Drupal API

↓継承

エンティティベースクラス

ContentEntityBase | ContentEntityBase.php | Drupal 8.2.x | Drupal API

↓継承

ノードクラス

Node | Node.php | Drupal 8.2.x | Drupal API

↓インスタンス化

ノードエンティティ

スクリーンショット 2019-01-11 13.29.42.png

大量のパラメーターとメソッドは親クラスから引き継がれたもの


図にまとめると・・・

スクリーンショット 2019-01-11 16.19.14.png


 (最後に)エンティティシステムを使いこなせるとこんなに便利


エンティティのメソッドを使えると・・・

  • 全エンティティ共通のパラメーターやメソッド使って簡単にデータにアクセスできる
  • どんなデータもEntityManagerを通じて操作できる
  • エンティティ間で「連鎖」が可能(とある記事の著者IDからそのIDのユーザープロフィールにアクセスする、など)
// IDが1のノードの著者の名前を取得する
$node = \Drupal\node\Entity\Node::load(1); //ノードIDが1のノードエンティティを取得
$user = $node->getOwnerId(); //ノードの著者のユーザーエンティティを取得
$author_name = $user->getUserName(); //ユーザーエンティティが持つユーザー名を取得

//連鎖した書き方
$author_name = \Drupal\node\Entity\Node::load(1)->getOwnerId->getUserName();

カスタムのエンティティタイプを作成できると・・・

  • 複雑なデータ構造のウェブコンテンツを簡単に実装できる
  • コードを書かずにViews、Token、RESTなどとのインテグレーションを使える
  • コードを書かずにDrupalの多言語機能に対応できる

みなさんもよいエンティティライフを!

12
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
17