こちらのサイトではDRUPAL10に関連する記事を掲載しています。
Drupalでは「モジュール」と呼ばれる、小さなソフトウェアを実装することで機能拡張を行います。本ウェビナーシリーズでは、Drupalのモジュール開発に関する基礎知識を解説します。Drupalのバックエンド周りについて体系的に学びたい方、自分でカスタムモジュールを作れるようになりたい方、アクイア認定デベロッパー試験を目指す方におすすめです。
Drupalを一通り操作したことがある方を対象としています。まだDrupalを触ったことが無い方は、初心者向けDrupalチュートリアル動画(日本語)を先に見ておくとより理解が深まります。
カスタムモジュールを作ろう
カスタムモジュールを作る方法は以下の方法がある
- フック
- プラグイン
- エンティティ
- サービス
- ルーティング
- イベント
今回はフックでモジュールを作成する
今回の作成手順

*.info.ymlファイル作成
モジュールのメタ情報を記載する
モジュール作成において唯一の必須ファイルになる
配置場所

設定内容
description以外は必須項目
下記以外にもオプション設定がある

有効化
YMLファイルだけで有効化のリストに表示されるようになる

フックを実装
フックとは
Drupalの動作を変更する関数
Drupal7までは主にフックで実装されていた
既存のコードを変更することなく、Drupalコアやモジュールの動作を変更可能
フックにはhook_で始まる名前がある
フックには一連のパラメータと戻り値が用意されている
基本的にカスタムモジュールの*.moduleファイルでフックを実装する
カスタムモジュールでオリジナルのフックを実装することもできる
保存時のボタンの表示を変更する
Drupalのドキュメントに定義されている(300個くらいあ)

手順








ルーティングとコントローラを追加
ページが呼ばれる仕組み

リクエストを受け付ける(INDEX.PHP)
DRUPALカーネルを実行(SYMFONYのHTTPKERNELをベースにDRUPALKERNELを実装)
対象のコントローラを特定、実行、テンプレートレンダリングをする(ROUTING)
結果をレスポンスできる形式にして返す
ルーティングシステム

既存Drupalサイトのルート一覧
Develモジュールで全ルート一覧を取得できる

YMLファイルで定義

コントローラの作成

maruchaパスをアクセスする

ルーティング一覧に表示される

フォームを作成
このようなフォームをカスタムモジュールでつくる
Drupal FormAPIを使う

DrupalのFormAPIとは
FormAPIとはHTMLフォームを定義するための抽象化レイヤー
フォームの定義、表示、検証、送信というライフサイクルを制御する
フォームが要求されるとレンダリング可能は配列変数として定義される
レンダリング過程でHTMLに変換、エンドユーザに表示される
フォルムの種類
FormBase
ConfigFormBase他
フォームクラスの作成
getFormID()
buildForm()
submitForm()
以上3つのメソッドが必要



YMLファイルにルーティング定義を追加



ブロックを作成
ブロックAPIとは

ブロッククラスを作成する




練習問題

この記事またはDrupalに関するご質問がございましたら、お気軽にお問い合わせください。