ホームページ > バックエンド開発 > PHPチュートリアル > Drupal 8モジュールを構築する:ルーティング、コントローラー、メニューリンク

Drupal 8モジュールを構築する:ルーティング、コントローラー、メニューリンク

尊渡假赌尊渡假赌尊渡假赌
リリース: 2025-02-21 09:45:10
オリジナル
196 人が閲覧しました

Build a Drupal 8 Module: Routing, Controllers and Menu Links

コアポイント

  • DRUPAL 8は、手続き上のプログラミングからオブジェクト指向アーキテクチャに移行し、Symfonyコンポーネントなどの重要な追加を含む、誇らしげに発見された他のプログラムを通じて他のソースからコードを統合します。
  • DRUPAL 8モジュールの作成には、.info.ymlファイルなどの必要なフォルダー構造とファイルを定義する必要があります。現在、カスタムおよび貢献モジュールフォルダーはrootディレクトリmodules/の直接の下にあり、コアコードは別のcore/フォルダーに移動されます。
  • Drupal 8の「ルーティング」は、Symfony2コンポーネントを活用して、Drupal 7の>関数を置き換えます。これには、ルートを構成として定義し、コントローラーのコールバック関数を処理することが含まれます。モジュールのルーティングファイル
  • は、モジュールルートフォルダーで作成されます。 hook_menu() demo.routing.ymlメニューリンクは
  • で処理されなくなりましたが、YMLファイルの構成として宣言されます。 [モジュールルートディレクトリ]に
  • という名前のファイルを作成して、メニューリンクとその場所をサイトの既存のメニューに定義します。 hook_menu() demo.menu_links.yml
執筆時点ではDrupal 8がまだ開発中であるため、コードの一部は時代遅れになる可能性があることに注意してください。サンプルコードを更新しようとしたコードベースを参照して、最新のDrupal 8バージョンと互換性があります。

Drupal 8は、他の最新のPHPフレームワークに合わせようとして、多くの変更を導入しています。これは、古いPHP 4スタイルの手続きプログラミングが主にオブジェクト指向のアーキテクチャに置き換えられたことを意味します。これを達成するために、誇らしげに発見された他の場所プログラムの下で、Drupal 8にはDrupal専用に開発されていないコードが含まれています。

Drupalへの最も重要な追加の1つは、Drupal開発者に2つの大きな影響を与えるSymfonyコンポーネントです。まず、Drupalのために開発したい開発者の数を大幅に増やす可能性があります。第二に、現代のPHP実践経験を欠いているDrupal 7開発者にいくつかの懸念を残しています。しかし、それは大丈夫です、私たちは皆学んでいます。Symfony(そしてできればDrupal 8)のようなフレームワークから学んだ経験は、他のPHPフレームワークに簡単に拡張され、適用されます。

一方、Drupal 8はリリースサイクルの後期段階にあり、現在のバージョンはAlpha11を執筆しています。このバージョンを使用して、Drupal 7開発者が最初に遭遇し、慣れているモジュール開発の基本的な変更を紹介します。このシリーズで書いたコードを見つけることができるgitコードベースを設定します。必要に応じて、このように従うことができます。

モジュールを作成する方法は?

最初に焦点を当てる必要があるのは、Drupal 8が新しいモジュールを理解できるように、必要なフォルダー構造とファイルを定義することです。 DRUPAL 7では、少なくとも2つのファイル(.info.module)を作成する必要がありますが、Drupal 8では、前者のYAMLバージョンで十分です。はい、.infoファイルは.info.ymlファイルに置き換えられ、同様のデータが含まれていますが、構造が異なります。

もう1つの大きな変更は、カスタムおよび貢献モジュールフォルダーがルートディレクトリmodules/フォルダーに直接移動することです。これは、すべてのコアコードが独自の個別のcore/フォルダーに移動されたためです。もちろん、modules/ディレクトリでは、drupal 7のようにcustom およびの貢献にモジュールを分離することをお勧めします。

デモ(非常にオリジナル)というモジュールを作成し、

ディレクトリに入れてみましょう。先ほど述べたように、この新しく作成されたmodules/custom/フォルダー内で、最初に次の必要なコンテンツを含むdemo/ファイルのみが必要です。 demo.info.yml

4つのキー価値ペアのうち3つ(名前、説明、コア)に精通している必要があります。テーマのYMLファイルも作成できるため、タイプも要件です。注意すべきもう1つの重要なことは、YMLファイルのスペースが理にかなっており、正しいインデンテーションを使用してデータを配列のような構造に整理することです。
name: Drupal 8 Demo module
description: 'Demo module for Drupal 8 alpha11'
type: module
core: 8.x
ログイン後にコピー
ログイン後にコピー

このドキュメントページを、モジュールに追加できる追加のキー値ペアについては、この形式の変更を発表するための指示を表示できます。

このようなファイルです。これで、拡張機能ページに移動し、デモモジュールを見つけて有効にすることができます。 .info.yml

私が述べたように、モジュールを有効にする前に、

ファイルを作成する必要はなくなりました。建築的に言えば、ほとんどのビジネスロジックはサービスクラス、コントローラー、プラグインに移動するため、

ファイルのサイズが大幅に削減されますが、後でそれらの一部を確認します。

.module「ルーティング」とは何ですか、そしてそのコールバック関数はどうなりますか? .module Drupal 7では、Drupalの経路を定義し、これらのパスをコールバック関数に接続するために使用されるため、

はおそらく最も実装されたフックです。また、メニューリンクや他の多くのコンテンツを作成する責任もあります。

Drupal 8では、symfony2コンポーネントを使用してルーティングを処理するため、hook_menu()は必要ありません。これには、ルートを構成として定義し、コントローラーのコールバック関数(コントローラークラスの関数)を処理することが含まれます。これを行う方法を見てみましょう。

最初に、モジュールにhook_menu()という名前のルーティングファイルを作成する必要があります。このファイルは、モジュールルートフォルダーにあります(

に隣接しています)。このファイルでは、次の(単純な)ルート定義を持つことができます。
name: Drupal 8 Demo module
description: 'Demo module for Drupal 8 alpha11'
type: module
core: 8.x
ログイン後にコピー
ログイン後にコピー

最初の行は、モジュールデモ用のデモと呼ばれる新しいルートを作成する開始点を示します(最初はモジュール名、2番目はルート名です)。パスでは、このルートに登録するパスを指定します。デフォルトには、デフォルトページタイトル(_title)と_contentの2つのことがあります。これは、Democontrollerクラスの関数を参照しています。要件では、ページを表示するためにユーザーが必要とするアクセス許可を指定します。このルーティングファイルが持つことができるより多くのオプションについては、このドキュメントページを参照する必要があります。

ここで、Democontrollerという最初のコントローラーを作成しましょう。これは、ユーザーがこのページをリクエストしたときにDemo()という関数を呼び出します。

後でSRC/フォルダーに表示されるコントローラーと他のクラスは、PSR-4標準の一部です。最初は、より大きなフォルダー構造(PSR-0標準)を作成する必要がありましたが、現在、両方の動作がある遷移フェーズがあります。したがって、lib/というフォルダーに配置されているコードがまだ表示されている場合、それはpsr-0です。

democontroller.phpファイルでは、クラスを宣言できるようになりました。

これは、ページに何かを表示するために行うのが最も簡単で最小のことです。上部では、クラスの名前空間を指定します。以下では、クラスを宣言します。
demo.demo:
  path: '/demo'
  defaults:
    _content: '\Drupal\demo\Controller\DemoController::demo'
    _title: 'Demo'
  requirements:
    _permission: 'access content'
ログイン後にコピー

Democontrollerクラスでは、Demo()関数のみがあり、Drupal 7と同様のレンダリング可能な配列を返します。大したことではありません。私たちが今しなければならないのは、キャッシュを明確にし、

https://www.php.cn/link/1a4a5f89e71e4bbb99733555c964a950b4

drupalページ hello world に移動することです。 メニューリンクはどこにありますか?

Drupal 7では、

を実装すると、メニューに登録されたパスを追加して、サイトにメニューリンクを表示することもできます。繰り返しますが、これはこのフックでは処理されなくなりましたが、代わりにYMLファイルを使用してメニューリンクを構成として定義します。

管理された「構造」メニューの下に表示されるメニューリンクを作成する方法を見てみましょう。まず、モジュールのルートディレクトリにhook_menu()という名前のファイルを作成する必要があります。このYMLファイルでは、メニューリンクとその場所をサイトの既存のメニューに定義します。設定した目標を達成するには、次のことが必要です。

再びインデントベースのYML構造があり、モジュールデモのメニューリンクのマシン名(デモ)を最初に定義します(ルーティングで行ったように)。次に、リンクのタイトルと説明があり、その後にこのリンクの親(配置する必要がある)と使用するルートが続きます。 demo.menu_links.yml親の値は親メニューリンク(モジュールを添付)であり、それを見つけるには、 *.menu_links.ymlファイルで掘る必要があります。 「構造」リンクがコアシステムモジュールで定義されていることを知っているため、System.menu_links.ymlファイルを見ることで、このリンクの名前を決定できます。

route_nameは、このリンクに使用するルートのマシンの名前です。前に定義しました。これにより、キャッシュをクリアして、

https://www.php.cn/link/6c2665d7c3ed1e5bfd8ba600f026eb55デモ/パスに移動できます。良い。

結論

この記事では、Drupal 8のモジュール開発を検討し始めます。この段階(Alpha11バージョン)では、新しいAPIおよびポート貢献モジュールの使用方法を学び始める時が来ました。これを行うために、私はこの新しいエキサイティングなフレームワーク

(Drupal 8)の探求を書いています。

最初に、いくつかの基本を学びました:Drupal 8モジュール(ファイル、フォルダー構造など)を起動し、Drupal 7と比較する方法。また、ルートとコントローラークラスを定義する方法、およびこのルートを介して関数を呼び出す方法も学びました。最後に、定義したルートを使用するメニューリンクを作成する方法がわかります。

次のチュートリアルでは、このモジュールを作成し続け、Drupal 8が使用する他のクールな新機能について学びます。ブロックを作成する方法とフォームを使用してシステムを構成する方法を学びます。じゃあね。

Drupal 8モジュール(FAQ)

の構築に関するFAQ

Drupal 8モジュールの基本構造は何ですか?

Drupal 8モジュールは、基本的に特定の機能を含むファイルのセットであり、特定の方法で構築されています。基本構造には、

ファイル(モジュールに関するメタデータを提供)、

.info.ymlなどのその他のオプションファイルが含まれます。アタッチング関数。 .moduleファイルは必須であり、モジュールの名前、説明、パッケージ、タイプ、コア、および依存関係を定義します。 .css .jsDrupal 8のルーティングシステムはどのように機能しますか? .twig .info.yml Drupal 8のルーティングシステムは、URLを特定のコントローラークラスにマッピングする責任があります。 Symfonyのルーティングコンポーネントを使用して、柔軟で強力なシステムを可能にします。ルーティングシステムは、

ファイルを使用して、一意の名前、パス、デフォルト値、および要件を持つルートを定義します。デフォルト値は通常、リクエストの処理を担当するコントローラークラスを指定します。

Drupal 8でカスタムページを作成する方法は?

routing.ymlDrupal 8でカスタムページを作成するには、ルートとコントローラーの定義が含まれます。ルートは

ファイルで定義され、URLをコントローラーにマッピングします。コントローラーは、ページコンテンツのレンダリングされた配列を返すPHPクラスです。コントローラークラスは、モジュールの

ディレクトリに配置する必要があります。

私のDrupal 8カスタムページにメニューリンクを追加する方法は?

カスタムページにメニューリンクを追加するには、モジュールでlinks.menu.ymlファイルを作成することが含まれます。このファイルは、プロパティにタイトル、説明、親、ルート名、重量が含まれるメニューリンクを定義します。ルート名は、routing.ymlファイルで定義されているルート名と一致する必要があります。

Drupal 8でフォームを作成する方法は?

Drupal 8でフォームを作成するには、

クラスを拡張し、FormBaseを実装するフォームクラスの作成が含まれます。このクラスは、フォーム要素、検証、および提出処理を定義します。フォームは、コントローラーから返すことで表示できます。 FormInterface

Drupal 8でブロックを作成する方法は?

Drupal 8にブロックを作成するには、

クラスを拡張するブロッククラスの作成が含まれます。このクラスは、ブロックコンテンツとその他のプロパティを定義します。ブロックは、ブロックレイアウトインターフェイスを介してページに配置できます。 BlockBase

Drupal 8で構成フォームを作成する方法は?

構成フォームの作成には、

クラスを拡張し、ConfigFormBaseを実装するフォームクラスの作成が含まれます。このクラスは、フォーム要素を定義し、構成データのストレージとロードを処理します。 FormInterface

Drupal 8で管理ページを作成する方法は?

管理ページを作成するには、

の下のルートと、ページの内容を返すコントローラーを定義することが含まれます。ページは、/admin下の親とのメニューリンクを定義することにより、管理メニューに追加できます。 system.admin

Drupal 8でテーマを作成する方法は?

Drupal 8でトピックを作成するには、名前、説明、タイプ、コア、および基本的なトピックを定義する

ファイルを作成することが含まれます。その他の.info.yml.twig.cssファイルを追加して、各要素のテーマを設定することができます。 .js

Drupal 8でカスタムフィールドタイプを作成する方法は?

カスタムフィールドタイプを作成するには、

クラスを拡張するフィールドタイプクラスの作成が含まれます。このクラスは、保存、表示、およびフォーム処理のためのフィールドプロパティと方法を定義します。フィールドタイプは、コンテンツタイプ、ユーザー、コメント、その他のエンティティに使用できます。 FieldTypePluginBase

以上がDrupal 8モジュールを構築する:ルーティング、コントローラー、メニューリンクの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート