Drupal 8でカスタムエンティティを作成する方法[終了]


10

多くのカスタムエンティティを持つDrupal 7でビルドした大きな個人プロジェクトがあります。プロジェクトをDrupal 8にアップグレードしたいのですが、完全に書き直されたDrupal 8コアは大きすぎて、ドキュメントなしで頭を動かすことはできません(+ Symfonyはまったく知られていないので、私は単純なDrupalのみの人です)。 。

コアモジュールのコードをいくつか見ただけでカスタムエンティティを作成しようとしましたが、成功しませんでした。

Drupal 8のカスタムエンティティに関するいくつかの記事(私は1つを見つけることができませんでした)を紹介してもらえますか、またはいくつかの基本的なステップバイステップガイドを教えてください。

ありがとう。

entities  8 

1
質問を編集して、あなたがどこまで到達したか、正確にどこで苦労しているのかについて少し追加してください。問題が発生している特定のコードを確認するのが理想的です。カスタムエンティティの構築は簡単な作業ではありません。おそらく、サイトの形式と適切な回答が得られる可能性の両方にとって、質問が広すぎる可能性があります。リンク/チュートリアルのリクエストは、そのため、ここでは特にトピックから外れていることに注意してください。少しずつ分解して、それらの小さな断片について質問するのが良いでしょう。ありがとう
クライヴ

余談ですが、Symfonyをまったく知らなければ、D7の知識をD8に適用するのは難しいでしょう。物事は大幅に変更されました(すでにご存じのとおり)。旅に出る前に、Symfonyの本をできるだけ多く読むことを強くお勧めします。アースのようなものを持つことは、遷移になりますロットスムーズにし、私を信頼しています。別の
Clive

@Clive検証APIとは別に、Drupal 8にはEntity APIがあり、Symfonyとはほとんど関係がないので、それほど関連性があるとは思いません。それ以外の場合は、質問が広すぎることに同意しますが、概要を説明しようとしたので、より具体的な質問にさらに詳しく回答できます。そして、D8を知らなければ、それは明白ではないので、開始点を持つことが役立ちます。
Berdir 2013年

@Berdir私はD7-> D8全般を意味しました。具体的にはエンティティではありません。たとえば、symfonyのルーティングとサービスについて理解することで、一般的にコアコードの理解がはるかに容易になります。ちなみにすばらしい記事です。この質問を今すぐ閉じることを考える理由もありません。IMO、それは価値のあるリソースです(広い意味で少しでも)
クライヴ

回答:


13

私はここでEntity APIドキュメントに取り組んでいます:https : //drupal.org/developing/api/entity

質問は大きすぎて詳細に答えることができません。コンテンツまたは構成エンティティが必要かどうかによって異なります。コンテンツエンティティ(データベースに格納され、フィールド化可能/改訂可能/ ...、上記のリンクの詳細が可能)が必要であると仮定すると、このようなことを行う必要があります。上記のリンクされたドキュメントは、最終的にチュートリアルを含む各ステップを最終的にカバーします、それは最初のステップのみをカバーしています。

  1. エンティティークラスを提供し、エンティティーとして公開するために必要な注釈を追加します。
  2. 必要なテーブルを提供します。すでに7.xスキーマを持っている場合はそれほど変更する必要はありませんが、エンティティに言語/翻訳可能がある場合は、uuid列とおそらくlangcode列を追加します。一部の基本フィールド(プロパティ)を翻訳可能または改訂可能にする場合は、ステップでリンクされているノードの例を参照してください。現在、必要なテーブルを自分で提供する必要があります。
  3. baseFieldDefinitions()メソッドで基本フィールド定義を提供します。。これが機能する方法は、https://drupal.org/node/2047229で(配列からクラスに)変更されることに注意してください
  4. エンティティを保存する前に(変更されたタイムスタンプの更新など)実行する必要があるカスタムロジックがある場合は、必要なpre / post Save / load / Deleteメソッドを実装します。
  5. 重要なアクセスロジックがある場合はアクセスコントローラーを実装し、checkAccess()およびcheckCreateAccess()メソッドをオーバーライドするか、フルアクセスを許可する単一のアクセス許可しかない場合はアノテーションでadmin_permissionを指定します。
  6. 技術的には必須ではありませんが、基本フィールドに有用な(通常はget / set / isSomething())メソッドを含むエンティティクラス(NodeのNodeInterfaceなど)にインターフェイスを提供することをお勧めします。これにより、インターフェイスにヒントを入力して、これらのメソッドのオートコンプリートを取得します。

必要なものに応じて、必要なフォームの定義、場合によってはレンダーコントローラーなどの追加のステップもありますが、さらに情報が必要な場合は、これらはおそらく別の質問になるはずです。

ノート:

  • 構成エンティティは基本的に似ていますが、構成ストレージコントローラーを使用する必要があります(https://drupal.org/node/2119905でこれが簡単になります)。テーブルスキーマを定義する必要はありませんが(当然)提供する必要があります。構成スキーマファイル。たとえば、分類語彙やノードタイプのファイルを参照してください。
  • コンテンツエンティティの基本フィールドは、パブリックプロパティまたは保護プロパティとして定義されていません。代わりに、値およびフィールドプロパティで自動的に管理されます。get()/ set()または対応する魔法のメソッドを介してそれらにアクセスします。($ node-> titleは$ node-> get( 'title')と同じです)。
  • そこにあるドキュメントのヘルプは大歓迎です。必要なコンテンツ/構造の基本的な概要を作成したので、新しいページを作成して開始します。たとえば、簡単なチュートリアルに興味があります。構成エンティティについては、ここにすでに1つあります。準備ができたらエンティティのドキュメントに移動しますhttps : //drupal.org/node/1809494
  • Coreには非常に多くのコンテンツエンティティ実装があり、実用的な例を確認したい場合は、ノード、ユーザー、用語、コメント、カスタムブロックなど...手順1でリンクされている記事で説明されているように、常に提供されるエンティティタイプを見つけることができます。 Entity namespaaceのモジュール。
  • @fagoが今週末、DrupalCamp ViennaでEntity APIについてプレゼンテーションを行いました。ここで私が書いたことの多くをカバーしています。

1
Drupalのコードジェネレータは非常に便利である- >> github.com/Chi-teck/drupal-code-generator
レミー

1
drupalconsole.com-優れたヘルパー(定型コードを生成し、Drupalと対話してデバッグするためのツール)
milkovsky
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.