これまでの記事では、Services(サービス)、Dependency Injection(依存性注入、DI)とは何か、そしてそれらをコントローラー、ブロック、フォームでどのように使うかを説明しました:
これまでの記事では、Services(サービス)、Dependency Injection(依存性注入、DI)とは何か、そしてそれらを自分のController(コントローラー)とブロックでどのように使うかを説明しました:
12.15. Services(サービス)とDependency Injection。
12.15.1. コントローラーでの依存性注入(Dependency Injection)
12.15.2. ブロックでの依存性注入(Dependency Injection)
この記事では、FormBase を継承するフォームのクラスにDIを通じてサービスを追加する方法の例を示します:
これまでの記事では、Services(サービス)、Dependency Injection(依存性注入、DI)とは何か、そしてそれらを自分のController(コントローラー)でどのように使うかを説明しました:
12.15. Services(サービス)とDependency Injection。
12.15.1. コントローラーでの依存性注入(Dependency Injection)
この記事では、ブロックのクラスにDIを通じてサービスを追加する方法の例を示します:
/modules/custom/drupalbook/src/Plugin/Block/CartBlock.php:
前回の記事では、Dependencies Injection(依存性注入)とは何かを見てきました:
12.15. Services(サービス)とDependency Injection。
この記事では、コントローラーでのDependency Injection(依存性注入)を含むコードの例を示します。
/modules/custom/drupalbook/src/Controller/ModalFormContactController.php:
Drupalを使っていて、カスタムモジュールでコントリビュートモジュールやコアモジュールのコードを使用する必要がある場合、hookとservices(サービス)を使用します。この記事では、すでにフックを使用しました:
では、サービスについて見ていきましょう。Service(サービス)はPHPオブジェクトです。そのため、カスタムモジュールで新しいPHPクラスを作成するときは、後でコードを標準的な方法で他のモジュールでも使用できるように、最初からserviceとして定義するのがよいでしょう。
Drupalはすべてのservices(サービス)をPHPオブジェクトのService Containerに集約するため、利用可能なすべてのサービスと使用中のサービスに関する情報を1つの場所に保存します。このオブジェクトを呼び出して、どのサービスが使用されているかを確認できます:
Drupalは複雑なプラットフォームで、インストールやセットアップが難しいという意見もあります。しかし、Drupalは20年以上にわたって活発に開発されており、その間にインストールとセットアップのあらゆる方法が継続的に改善されてきました。現在では、仮想環境上でDockerを使ってDrupalをインストールできます。Landoを使って、10分でDrupalをインストールしてみましょう。
まず、Drupalが動作するWebサーバーをインストールする必要があります。しかし、個々の部品やパッケージからWebサーバーをセットアップすると10分以上かかるため、すぐに使えるソリューションを使用し、Dockerで仮想マシンを展開します。この仮想マシンは、仮想化していない通常のローカルWebサーバーと同じくらい速く動作します。
仮想環境上にWebサーバーをセットアップするには、DockerとLandoを使用する必要があります。まずDockerをインストールします。
Dockerのインストール
Dockerは公式サイトからダウンロードする必要があります:
前回の記事では、Viewsモジュールをカスタムデータベースと統合する方法を「Did this help?」モジュールで説明しました:
https://www.drupal.org/project/did_this_help
この記事では、Choice(はい/いいえ)フィールドのViewsフィルターをオーバーライドします:

ViewsモジュールはDrupalエコシステムで広く使われています。コンテンツのリスト、テーブル、ブロック、スライドショー、データエクスポート - これらのコンテンツの断片は通常Viewsで表示されます。コンテンツタイプ、ブロックタイプ、その他のエンティティタイプを使用している場合は、Viewsが自動的にそれらと統合済みであり、Viewsを使用してコンテンツを表示できます。しかし、hook_schema()で作成した独自のデータベーステーブルを使用するカスタムモジュールでは、ViewsモジュールUIでモジュールのデータを表示するためにViewsとの統合を書く必要があります。
Did this helpモジュールとViewsの統合を見てみましょう:
https://www.drupal.org/project/did_this_help
モジュールはデータを保存するための独自のデータベーステーブルを作成します。このテーブルには文字列、ID、日付が含まれるため、Views統合用に異なるハンドラーを定義する必要があります:
このチュートリアルは元々 Web Wash に公開されたものです。しかし、Berdir がこのチュートリアルをここに掲載してもよいか尋ねたので、ここに掲載します。
Drupal 7 のモジュールは、コード例 / スニペットをフィールドに保存できます。このモジュールには「スニペットフィールド」と呼ばれるカスタムフィールドが同梱されており、説明、ソースコード、構文ハイライトモード(どのプログラミング言語か)の3つのフォーム要素を表示します。
しかし、今こそモジュールを Drupal 8 に更新する時です。
このチュートリアルでは、Drupal 8 で「基本的な」カスタムフィールドをどのように作成したかをお見せします。PSR – 4、アノテーション、プラグインの詳細には踏み込みません。そうしないとチュートリアルが膨大になってしまうからです。