Drupal 8モジュールを構築する:ルーティング、コントローラー、メニューリンク
コアポイント
- 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は、他の最新の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
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()という関数を呼び出します。
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/1a4a5f89e71e4bbb99733555c964a950b4drupalページ 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)
の構築に関するFAQDrupal 8モジュールの基本構造は何ですか?
Drupal 8モジュールは、基本的に特定の機能を含むファイルのセットであり、特定の方法で構築されています。基本構造には、
ファイル(モジュールに関するメタデータを提供)、、
、、.info.yml
などのその他のオプションファイルが含まれます。アタッチング関数。 .module
ファイルは必須であり、モジュールの名前、説明、パッケージ、タイプ、コア、および依存関係を定義します。 .css
.js
Drupal 8のルーティングシステムはどのように機能しますか? .twig
.info.yml
Drupal 8のルーティングシステムは、URLを特定のコントローラークラスにマッピングする責任があります。 Symfonyのルーティングコンポーネントを使用して、柔軟で強力なシステムを可能にします。ルーティングシステムは、
Drupal 8でカスタムページを作成する方法は?
routing.yml
Drupal 8でカスタムページを作成するには、ルートとコントローラーの定義が含まれます。ルートは
ディレクトリに配置する必要があります。
私のDrupal 8カスタムページにメニューリンクを追加する方法は?
カスタムページにメニューリンクを追加するには、モジュールでlinks.menu.yml
ファイルを作成することが含まれます。このファイルは、プロパティにタイトル、説明、親、ルート名、重量が含まれるメニューリンクを定義します。ルート名は、routing.yml
ファイルで定義されているルート名と一致する必要があります。
Drupal 8でフォームを作成する方法は?
Drupal 8でフォームを作成するには、クラスを拡張し、FormBase
を実装するフォームクラスの作成が含まれます。このクラスは、フォーム要素、検証、および提出処理を定義します。フォームは、コントローラーから返すことで表示できます。 FormInterface
Drupal 8にブロックを作成するには、
クラスを拡張するブロッククラスの作成が含まれます。このクラスは、ブロックコンテンツとその他のプロパティを定義します。ブロックは、ブロックレイアウトインターフェイスを介してページに配置できます。 BlockBase
構成フォームの作成には、
クラスを拡張し、ConfigFormBase
を実装するフォームクラスの作成が含まれます。このクラスは、フォーム要素を定義し、構成データのストレージとロードを処理します。 FormInterface
管理ページを作成するには、
の下のルートと、ページの内容を返すコントローラーを定義することが含まれます。ページは、/admin
下の親とのメニューリンクを定義することにより、管理メニューに追加できます。 system.admin
Drupal 8でトピックを作成するには、名前、説明、タイプ、コア、および基本的なトピックを定義する
ファイルを作成することが含まれます。その他の.info.yml
、.twig
、.css
ファイルを追加して、各要素のテーマを設定することができます。 .js
カスタムフィールドタイプを作成するには、
クラスを拡張するフィールドタイプクラスの作成が含まれます。このクラスは、保存、表示、およびフォーム処理のためのフィールドプロパティと方法を定義します。フィールドタイプは、コンテンツタイプ、ユーザー、コメント、その他のエンティティに使用できます。 FieldTypePluginBase
以上がDrupal 8モジュールを構築する:ルーティング、コントローラー、メニューリンクの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

Phpoopでは、self ::は現在のクラスを指し、親::は親クラスを指し、静的::は後期静的結合に使用されます。 1.Self ::静的方法と一定の呼び出しに使用されますが、後期静的結合をサポートしていません。 2.Parent ::サブクラスには、親クラスのメソッドを呼び出すために使用され、プライベートメソッドにアクセスできません。 3.Static ::継承と多型に適した後期静的結合をサポートしますが、コードの読みやすさに影響を与える可能性があります。

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。
