13
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-01-11
Page 1 of 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の多言語機能に対応できる

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

13
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
13
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?